Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi OOP mit Delphi! (https://www.delphipraxis.net/8545-oop-mit-delphi.html)

powderfun 7. Sep 2003 15:36


OOP mit Delphi!
 
Hallo!
Ich wollte eine Vererbung in Delphi machen! Aus irgendwelchen Gründen klappt das aber nicht bei mir! kann mir jemand vielleicht helfen? das wäre eht super! Muss ich denn die prozeduren und funktionen usw., die ich vererben will in protected schreiben? ich habe sie nämlich in private stehen!
Vielen dank
Anja

Chewie 7. Sep 2003 15:37

Re: OOP mit Delphi!
 
Zeig mal deine Klassenstruktur.

powderfun 7. Sep 2003 15:43

Re: OOP mit Delphi!
 
Delphi-Quellcode:
Unit UBruch;


Interface

Type
  TBruch = Class
    Protected
      Z, N : Integer;
      Procedure Kuerzen;
    Public
      Constructor Create (EZ, EN : Integer);
      Function Zaehler_gekuerzt : Integer;
      Function Nenner_gekuerzt : Integer;

  End;

  TGBruch = Class(TBruch)
  Private
     E : integer;
     procedure kuerzen;
  Public
     Function Z_ges : integer;
  end;


Implementation

Procedure TBruch.Kuerzen;
{Euklidischer Algorithmus}
Var
  NZ, NN : Integer;
  Rest : Integer;
Begin
  NZ := Z; NN := N;
  Repeat
    Rest := NZ Mod NN;
  If Rest <> 0
    Then Begin
           NZ := NN; NN := Rest
         End;
  Until Rest = 0;
  Z := Z Div NN;
  N := N Div NN;

End;

Procedure TGBruch.kuerzen;
 begin
 inherited kuerzen;
 Z := Z mod N;
 E := Z div N;
 End;

Constructor TBruch.Create (EZ, EN : Integer);
Begin
  Z := EZ; N := EN;
End;

Function TBruch.Zaehler_gekuerzt : Integer;
Begin
  Kuerzen;
  Zaehler_gekuerzt := Z;
End;

Function TBruch.Nenner_gekuerzt : Integer;
Begin
  Kuerzen;
  Nenner_gekuerzt := N;
End;



 Function TGBruch.Z_ges : Integer;
 Begin
  Kuerzen;
  Z_ges := E;
 end;


End.
[edit=Christian Seehase] Delphi-Tags hinzugefügt. Bitte künftig selber machen. Danke Mfg, Christian Seehase[/edit]

powderfun 7. Sep 2003 15:44

Re: OOP mit Delphi!
 
Delphi-Quellcode:
unit PBruchhaupt;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, UBruch;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Panel1: TPanel;
    Panel2: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Button2: TButton;
    Panel3: TPanel;
    Label4: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Bruch: TBruch;
  GBruch: TGbruch;
  E : integer;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Bruch := TBruch.Create(StrtoInt(Edit1.Text),StrtoInt(Edit2.Text));
  Panel1.Caption := IntToStr(Bruch.Zaehler_gekuerzt);
  Panel2.Caption := IntToStr(Bruch.Nenner_gekuerzt);
  Panel3.caption := IntToStr(GBruch.Z_ges);
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
  Bruch.Destroy;
  Close;
end;

end.
[edit=Christian Seehase] Delphi-Tags hinzugefügt. Mfg, Christian Seehase[/edit]

aogwaba 7. Sep 2003 17:35

Re: OOP mit Delphi!
 
Hi,
Zitat:

Muss ich denn die prozeduren und funktionen usw., die ich vererben will in protected schreiben? ich habe sie nämlich in private stehen!
Nein brauchst du nicht, private, public, protected und published sind Zugriffsbeschränkungen nach aussen.
Was klappt den nicht bei den Klassen?
Die Syntax scheint OK!
Hier:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Bruch := TBruch.Create(StrtoInt(Edit1.Text),StrtoInt(Edit2.Text));
  Panel1.Caption := IntToStr(Bruch.Zaehler_gekuerzt);
  Panel2.Caption := IntToStr(Bruch.Nenner_gekuerzt);
  Panel3.caption := IntToStr(GBruch.Z_ges);// hier müsste es krachen, GBruch scheint nicht createt zu sein
end;
cu
waba

powderfun 7. Sep 2003 17:41

Re: OOP mit Delphi!
 
Oh super, danke!
Wie kann man denn das createn? Geht das genauso wie bei dem UBruch?
Kenn mich leider noch net so gut damit aus, hab gerade erst mit OOP angefangen (1 Stunde in der schule)...
viele Dank für die Hilfe!!!

aogwaba 7. Sep 2003 17:56

Re: OOP mit Delphi!
 
na genauso:
Delphi-Quellcode:
var myGBruch:TGBruch;
mybruch:TBruch;
begin
myGBruch:=TGBruch.create(1,1);// erzeugt instanz von TGBruch
myBruch:=TBruch.create(1,1);//erzeugt Instanz von TBruch

myBruch.free;
myGBruch.free;
end;
die Klasse TGBruch hat keinen eigenen Konstructor, weswegen der Konstructor der überschriebenen Klasse (TBruch) aufgerufen wird.

cu
waba

powderfun 7. Sep 2003 18:47

Re: OOP mit Delphi!
 
Und wo schreibe ich das hin?
ich habe das jetzt in die Unit Bruch geschrieben.
Irgendwie kommt aber trotzdem die gleiche fehlermeldung wie vorher.
Der erkennt die GBruch.Z_ges in der Unit PBruchhaupt nicht zu finden.
Woher weißt du das eigentlich alles?
Vielen Dank nochmal für deine Hilfe!!!
Ist echt super nett!!!

aogwaba 7. Sep 2003 19:21

Re: OOP mit Delphi!
 
da wo du die globale Variable 'GBruch' deklariert hast, in der Form-Unit. zb. in die ButtonClick-Routine:

Delphi-Quellcode:
 GBruch := TGBruch.Create(StrtoInt(Edit1.Text),StrtoInt(Edit2.Text));
  Panel1.Caption := IntToStr(GBruch.Zaehler_gekuerzt);
  Panel2.Caption := IntToStr(GBruch.Nenner_gekuerzt);
  Panel3.caption := IntToStr(GBruch.Z_ges);
  gbruch.free;
woher ich das weiss, hab die OH gelesen :wink:

cu
waba


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz