![]() |
RE: Frage zu OOP (2)
Danke für die antworten / den link in meine ersten thread. ich habe jedoch ein problem. Kann sich jemand mal meine source anschauen. Ich weiß nicht wo der Fehler ist:
Ich habe probiert 2 Klassen abzuleiten, ich kann jedoch nur bei TGirokonto einzahlen, abheben, ... Sobald ich TForm1.Button1Click o.ä. klicke stürzt alles ab. Ich denke mal das muss eine generell falsche anwendung sein. Vielleicht ein Problem mit override? Vielen Dank schon mal im voraus :thuimb: Bis jetzt hatte ich gedacht ich hätte es verstanden. :(
Delphi-Quellcode:
type
TKonto = class(TObject) private Kontostand :Integer; public Name :String; procedure einzahlen(betrag :integer); virtual; abstract; procedure abheben(betrag :integer); virtual; abstract; procedure anzeigen; virtual; abstract; end; TGirokonto = class(TKonto) procedure einzahlen(betrag :integer); override; procedure abheben(betrag :integer); override; procedure anzeigen; override; end; TSparkonto = class(TKonto) procedure einzahlen(betrag :integer); override; procedure abheben(betrag :integer); override; procedure anzeigen; override; end; var Form1: TForm1; GK: TGirokonto; SK: TSparkonto; implementation {$R *.dfm} procedure TGirokonto.einzahlen(betrag :integer); begin Kontostand:=Kontostand+betrag; end; procedure TGirokonto.abheben(betrag :integer); begin Kontostand:=Kontostand-betrag; end; procedure TGirokonto.anzeigen; begin Form1.Edit1.Text:=inttostr(Kontostand); end; procedure TSparkonto.einzahlen(betrag :integer); begin Kontostand:=Kontostand+betrag; end; procedure TSparkonto.abheben(betrag:integer); begin Kontostand:=Kontostand-betrag; end; procedure TSparkonto.anzeigen; begin Form1.Edit1.text:=inttostr(Kontostand); end; procedure TForm1.EinzahlenClick(Sender: TObject); begin GK.einzahlen(strtoint(edit1.Text)); end; procedure TForm1.AbhebenClick(Sender: TObject); begin GK.abheben(strtoint(edit1.Text)); end; procedure TForm1.AnzeigenClick(Sender: TObject); begin GK.anzeigen; end; procedure TForm1.FormCreate(Sender: TObject); begin GK := TGirokonto.Create; end; procedure TForm1.Button1Click(Sender: TObject); begin SK.einzahlen(strtoint(edit1.text)); end; procedure TForm1.Button2Click(Sender: TObject); begin SK.abheben(strtoint(edit1.Text)); end; procedure TForm1.Button3Click(Sender: TObject); begin SK.anzeigen; end; end. |
Re: RE: Frage zu OOP (2)
so spontan fällt mir nichts auf. kann aber was übersehen haben.
was kommt denn für eine meldung. sind in dem edit sicher nur ziffern? und du solltest auf jeden fall irgendwo den kontostand initialisieren! PS: KONTOSTAND ist private muss aber protected, sonst gehts nicht |
Re: RE: Frage zu OOP (2)
Erm.. hast Du vielleicht vergessen den Wert 'Kontostand' zu initialisieren?
|
Re: RE: Frage zu OOP (2)
hat er. aber das macht nichts. in diesem falle garnichts (glaub ich, müsste genullt werden), im allgemeinen höchstens falsche zahlen. aber das mit dem private klappt wirklich nicht
|
Re: RE: Frage zu OOP (2)
habs auf protected gesetzt. Aber es funkt immer noch nichts bei Sparkonto. TGirokonto funzt einwandfrei, aber ich verstehe nicht, warum es bei tsparkonto abstürzt.
|
Re: RE: Frage zu OOP (2)
Moin!
Du solltest im FormCreate auch das TSparKonto anlegen, nicht nur das Girokonto...
Code:
MfG
procedure TForm1.FormCreate(Sender: TObject);
begin GK := TGirokonto.Create; SK := TSparkonto.Create; end; Muetze1 |
Re: RE: Frage zu OOP (2)
Hast du auch ein entsprechendes Objekt erzeugt?
|
Re: RE: Frage zu OOP (2)
ahhh
natürlich Muetze :wall: dummer fehler. hab gesucht und gesucht und die ganze zeit gedacht ich hätte den ganzen oop kram nicht verstanden :) jetzt funktioniert es wie es soll :zwinker: danke an alle :dp: |
Re: RE: Frage zu OOP (2)
muetze scheint recht zu haben. entweder beides erstellen, oder nur mit GK arbeiten
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz