Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi RE: Frage zu OOP (2) (https://www.delphipraxis.net/23270-re-frage-zu-oop-2-a.html)

Trax 31. Mai 2004 20:42


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.

nailor 31. Mai 2004 20:45

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

Phoenix 31. Mai 2004 20:47

Re: RE: Frage zu OOP (2)
 
Erm.. hast Du vielleicht vergessen den Wert 'Kontostand' zu initialisieren?

nailor 31. Mai 2004 20:51

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

Trax 31. Mai 2004 20:56

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.

Muetze1 31. Mai 2004 20:58

Re: RE: Frage zu OOP (2)
 
Moin!

Du solltest im FormCreate auch das TSparKonto anlegen, nicht nur das Girokonto...

Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
  GK := TGirokonto.Create;
  SK := TSparkonto.Create;
end;
MfG
Muetze1

Luckie 31. Mai 2004 20:58

Re: RE: Frage zu OOP (2)
 
Hast du auch ein entsprechendes Objekt erzeugt?

Trax 31. Mai 2004 21:00

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:

nailor 31. Mai 2004 21:01

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