AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi [OOP]: Methode (mit Parameter) überschreiben
Thema durchsuchen
Ansicht
Themen-Optionen

[OOP]: Methode (mit Parameter) überschreiben

Offene Frage von "mytar"
Ein Thema von mytar · begonnen am 9. Sep 2004 · letzter Beitrag vom 21. Okt 2004
Antwort Antwort
Seite 1 von 2  1 2      
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#1

[OOP]: Methode (mit Parameter) überschreiben

  Alt 9. Sep 2004, 09:13
  • Ich hab neuerdings in der VCL etwas herumgestöbert, und hab da bei allen public-Methoden kein override gesehen, obwohl die Basisklasse die selbe Methode im public-Teil hat.
    Wie soll ich das verstehen?
  • Ich hab in einer Klasse ein Methode erstellt. Ich hab diese Klasse nun beerbt und wiederum die selbe Methode verwendet nur mit anderen Parametern. Ich hab schon von reintroduce gelesen, allerdings überschreibt das die geerbte Methode ohne das ich auf diese über inherited zugreifen kann, also nicht das richtige für mich. Hier der Code:
    Delphi-Quellcode:
    TListe = class
    {...}
    public
    function Add_Knoten(Knoten: TKnoten): TKnoten;
    end;

    TNewListe = class(TListe)
    {...}
    public
    function Add_Knoten(Knoten: TNewKnoten): TNewKnoten;
    end;

    function TListe.Add_Knoten(Knoten: TKnoten): TKnoten;
    begin
    {...}
    end;

    function TNewListe.Add_Knoten(Knoten: TNewKnoten): TNewKnoten;
    begin
     Result := TNewKnoten(inherited Add_Knoten(TKnoten(Knoten))); //Löst immer einen Fehler aus
    end;
    Was mache ich falsch?
Francis Obikwelu
greetz
mytar
  Mit Zitat antworten Zitat
dango

Registriert seit: 6. Sep 2004
Ort: Büdingen-Büches
9 Beiträge
 
#2

Re: [OOP]: Methode (mit Parameter) überschreiben

  Alt 9. Sep 2004, 11:11
Hallo
Zitat:
Delphi-Quellcode:
function TListe.Add_Knoten(Knoten: TKnoten): TKnoten;
begin
{...}
end;

function TNewListe.Add_Knoten(Knoten: TNewKnoten): TNewKnoten;
begin
Result := TNewKnoten(inherited Add_Knoten(TKnoten(Knoten))); //Löst immer einen Fehler aus
end;
Die Typumwandlung ist falsch ! Ein Downcast von TNewKnoten nach TKnoten ist möglich, Du versuchst hier aber einen Upcast von TKnoten nach TNewKnoten !

Gruß
Daniel
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: [OOP]: Methode (mit Parameter) überschreiben

  Alt 9. Sep 2004, 11:54
Moin!

Grundlegendes: Ich gehe davon aus, das TNewKnoten von TKnoten abgeleitet ist! - da dies vorher nicht geklärt wurde.

Wenn das der Fall ist, dann einfach so:

Code:
function TListe.Add_Knoten(Knoten: TKnoten): TKnoten;
begin
{...}
end;

function TNewListe.Add_Knoten(Knoten: TNewKnoten): TNewKnoten;
begin
Result := ( inherited Add_Knoten(Knoten) As TNewKnoten ); //Löst immer einen Fehler aus
end;
Dabei gehe ich davon aus, das Add_Knoten keine Instanz anlegt sondern eine vorhandene oder die übergebene TNewKnoten Instanz zurück gibt. Wenn es keine Instanz von TNewKnoten ist, dann schlägt die in der As Abfrage enthaltene Is Abfrage fehl und Result wird nicht gefüllt bzw. mit NIL. Daher gibt er entweder eine eindeutige TNewKnoten Instanz zurück oder Nil bzw. einen Zufallswert.

Beim Aufruf kannst du direkt die TNewKnoten Instanz angeben, weil TNewKnoten von TKnoten abgeleitet ist.

MfG
Muetze1
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: [OOP]: Methode (mit Parameter) überschreiben

  Alt 9. Sep 2004, 12:16
ich denke, dass diese zwei zwar gleichnamigen Methoden wie zwei verschiedene gehandhabt werden, daher wird er auch keine inherited finden können, da sich die zwei durch die Parameter unterscheiden.
Günter
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: [OOP]: Methode (mit Parameter) überschreiben

  Alt 9. Sep 2004, 16:19
Moin!

Nein, da hat er keine Probleme, da er die andere Methode findet, weil es die Basisklasse von dem TKnoten Objekt enthält. Das übergeben Objekt hat ja schon den Typ TNewKnoten, daher hat er da kein Problem. Wenn der Parameter einen niedrigeren Typ hätte (z.B. TObject), dann würde er fehlschlagen und meckern...

MfG
Muetze1
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#6

Re: [OOP]: Methode (mit Parameter) überschreiben

  Alt 28. Sep 2004, 16:57
Danke für die Antworten!

Nochmals auf meine 1. Frage zurückzukommen:

Zitat von mytar:
  • Ich hab neuerdings in der VCL etwas herumgestöbert, und hab da bei allen public-Methoden kein override gesehen, obwohl die Basisklasse die selbe Methode im public-Teil hat.
    Wie soll ich das verstehen?
Danke
Francis Obikwelu
greetz
mytar
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#7

Re: [OOP]: Methode (mit Parameter) überschreiben

  Alt 28. Sep 2004, 16:58
Verstehe es doch so: Borland nimmt es nicht so genau..
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#8

Re: [OOP]: Methode (mit Parameter) überschreiben

  Alt 28. Sep 2004, 17:00
Wozu gibt es dann override?
Wird dieses Überschreiben überall außer im public-Teil verwendet?
Francis Obikwelu
greetz
mytar
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#9

Re: [OOP]: Methode (mit Parameter) überschreiben

  Alt 2. Okt 2004, 13:48
*push*
Francis Obikwelu
greetz
mytar
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#10

Re: [OOP]: Methode (mit Parameter) überschreiben

  Alt 2. Okt 2004, 13:53
Zitat von mytar:
Wozu gibt es dann override?
Um zwei Prozeduren/Funktionen gleichen Namens aber mit unterschiedlichen Parametern im gleichen Gültigkeitsbereich haben zu können.

Delphi-Quellcode:
type
  TExample = class(TObject)
  public
    constructor Create();
    constructor Create(o: TObject); override;
  end;
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:33 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