Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi OOP und ihre Tücken... (https://www.delphipraxis.net/170274-oop-und-ihre-tuecken.html)

Furtbichler 9. Sep 2012 10:35

AW: OOP und seine tücken...
 
Ich verstehe das Problem nicht. Das funktioniert doch alles wie gewünscht:

Delphi-Quellcode:
Type
  TA = Class
    Function WhoAmI : String; Virtual;
  End;
  TB = Class(TA)
    Function WhoAmI : String; override;
  End;

Function TA.WhoAmI : String;
begin
  result := 'A';
end;
Function TB.WhoAmI : String;
begin
  result := 'B';
end;

Function GetInst : TA;
Begin
  Result := TB.Create;
End;

Var
  test : TA;
begin
  test := GetInst;
  Writeln(test.WhoAmI) // Liefert 'B', was auch sonst
  test.free;
end;

DeddyH 9. Sep 2012 10:56

AW: OOP und seine tücken...
 
Zitat:

Zitat von Furtbichler (Beitrag 1182160)
Ich verstehe das Problem nicht.

Zitat:

Zitat von Furtbichler (Beitrag 1182160)
In der Tat.

:mrgreen:
Das Problem ist, dass die Elternklasse keinen primitven Datentypen zurückgibt, sondern eine Objektinstanz. In den abgeleiteten Klassen soll nun auch eine Instanz einer abgeleiteten Klasse zurückgegeben werden, deren Methoden man dann ohne Cast nutzen kann.

Furtbichler 9. Sep 2012 14:28

AW: OOP und ihre Tücken...
 
Hä?
Zitat:

Hat man nun allerdings eine Prozedur a la:
Delphi-Quellcode:
function GetOSFile: noFile;
begin
    Result := noFile_Permanent.Create;
end;
Landet man, wenn man die Rückgabe dieser Prozedur anspricht, bei den Prozeduren der BasisKlasse noFile (z.B. habe ich eine Methode Length, die bei noFile = 0 zurückgibt, bei Permanet die Länge der Datei), statt bei denen von noFile_Permanent.
Hier ist eine Funktion (keine Methode), die eine Instanz liefert und er will auf virtuelle Funktionen, die einen Basistypen (hier: Integer) liefern, zugreifen und wundert sich, das nur die der im Basistyp implementiere Code verwendet wird.

Das widerspricht aber deiner Erklärung.

Sein Problem habe ich durch meinen Code wiederlegt. Mir scheint, ihr redet von etwas anderem.

Das Wetter ist eh zu schön, um hier vor dem Rechner zu sitzen. Viel Spass noch.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:29 Uhr.
Seite 2 von 2     12   

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 by Thomas Breitkreuz