AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kind as Opa innerhalb der Deklerartion

Ein Thema von dmdjt · begonnen am 9. Sep 2009 · letzter Beitrag vom 10. Sep 2009
Antwort Antwort
Seite 2 von 4     12 34      
dmdjt

Registriert seit: 18. Jul 2009
37 Beiträge
 
Delphi 2007 Enterprise
 
#11

Re: Kind as Opa innerhalb der Deklerartion

  Alt 9. Sep 2009, 14:03
Oja, das hilft!

Und damit hat die Frage sich wirklich ausgezahlt. Auch wenn sie in ihrer Ursprungsform irgendwie nicht so besonders sinnvoll erscheint. (Normal hätte ich einfach bei TVater eine weitere Methode eingeführt und nicht jene von TOpa überschrieben.)

Manche Dinge versteht man erst richtig, wenn man ihre Grenzen findet.

Achja, warum sind die Bezichnungen Opa, Vater und Kind ungünstig gewählt? Dachte nur, dass so der Stammbaum schnell ersichtlich ist. Bin aber was Namensgebung betrifft irgendwie sehr schleißig sollte ich ändern
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Kind as Opa innerhalb der Deklerartion

  Alt 9. Sep 2009, 14:09
Delphi-Quellcode:
  TOpa = class
  public
    procedure MeinName(); virtual;
  end;

  TVater = class( TOpa )
  public
    procedure MeinName(); override;
  end;

  TKind = class( TVater )
  public
    procedure MeinName(); override;
  end;

...
procedure TForm1.FormCreate(Sender: TObject);
var
  k: TKind;
begin
  k := TKind.Create;
  k.MeinName;
  k.Free;
end;

{ TOpa }
procedure TOpa.MeinName;
begin
  ShowMessage( 'Ich bin dein Opa' );
end;

{ TVater }
procedure TVater.MeinName;
begin
  inherited;
  ShowMessage( 'Ich bin dein Vater, krchh (:D)' );
end;

{ TKind }
procedure TKind.MeinName;
begin
// inherited;
  asm
    call TOpa.MeinName
  end;
  ShowMessage( '(Kind:) a gugugugu' );
end;
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
dmdjt

Registriert seit: 18. Jul 2009
37 Beiträge
 
Delphi 2007 Enterprise
 
#13

Re: Kind as Opa innerhalb der Deklerartion

  Alt 9. Sep 2009, 14:17
Hey, das ist cool und funktioniert!

Wie bist Du auf die Idee gekommen und noch viel wichtiger: Warum geht das mit Inline-Assembler?

Edit:
Okay, ich kanns mir vorstellen warum. Angelegt wird die Methode ja irgendwo. Und mit call springt man halt zu eben jener.
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Kind as Opa innerhalb der Deklerartion

  Alt 9. Sep 2009, 14:19
Wie bin ich auf die Idee gekommen?
Hab einfach das Projekt debuggt, und gesehen, wie ein inherited Aufruf in Assembler aussieht.

Warum funktioniert das?


MfG
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: Kind as Opa innerhalb der Deklerartion

  Alt 9. Sep 2009, 14:23
@Aphton
Das funktioniert nicht!
Greif mal in TOpa.MeinName auf self zu (Also lass dir irgendein sinnvolles Feld einfallen)!

Ansonsten kannst du auch MeinName als Klassenmethode deklarieren, dann geht es auch ohne ASM.
Edit: Aber eine Klassenmethode ist ja nicht das Ziel.

Edit2: Folgende Änderung:
Delphi-Quellcode:
 TOpa = class
  private
     x:Integer;
  public
    procedure MeinName(); virtual;
  end;

//und:

procedure TOpa.MeinName;
begin
  x:=5;
  ShowMessage( 'Ich bin dein Opa' );
end;

procedure TKind.MeinName;
var i:Integer;
begin
  for i:=0 to 0 do showmessage('Damit es nicht durch Zufall doch klappt');
  asm
    call TOpa.MeinName
  end;
  ShowMessage( '(Kind:) a gugugugu' );
end;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#16

Re: Kind as Opa innerhalb der Deklerartion

  Alt 9. Sep 2009, 14:23
Zitat von dmdjt:
Hey, das ist cool und funktioniert!

Wie bist Du auf die Idee gekommen und noch viel wichtiger: Warum geht das mit Inline-Assembler?
Die Frage ist eher: Geht das auch ohne? Also nur TOpa.MeinName()?
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#17

Re: Kind as Opa innerhalb der Deklerartion

  Alt 9. Sep 2009, 14:29
Zitat von dmdjt:
Mit virtual, abstract usw. (wie heißen diese Schlüsselworte eigentlich?) kenn ich mich nicht mehr besonders gut aus und hab einfach nur herum probiert. Liegt es vielleicht an denen?
Ja.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#18

Re: Kind as Opa innerhalb der Deklerartion

  Alt 9. Sep 2009, 14:29
Nö, das tut es nicht.
Ich nehme mal an, per Inline Asm ruft man da direkt im Proc-Chain die Methode(Proc/Func) auf,
da ja bei der Vererbung den erbenden Klassen alle Methoden der Parentklasse zur Verfügung stehen.

Aber ich rate nur blöd rum... Deshalb halte ich mich an mein Avater

MfG
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#19

Re: Kind as Opa innerhalb der Deklerartion

  Alt 9. Sep 2009, 14:31
Zitat von NamenLozer:
Die Frage ist eher: Geht das auch ohne? Also nur TOpa.MeinName()?
Wie gesagt: Es geht (eigentlich) nicht mal mit. Hier ist es nur Zufall, da self nicht benötigt wird.
Und bei einer Klassenmethode gänge es auch ohne, ja. Aber hier ging es ja um virtuelle Methoden.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#20

Re: Kind as Opa innerhalb der Deklerartion

  Alt 9. Sep 2009, 14:36
Zitat von sirius:
Zitat von NamenLozer:
Die Frage ist eher: Geht das auch ohne? Also nur TOpa.MeinName()?
Wie gesagt: Es geht (eigentlich) nicht mal mit. Hier ist es nur Zufall, da self nicht benötigt wird.
Und bei einer Klassenmethode gänge es auch ohne, ja. Aber hier ging es ja um virtuelle Methoden.
Dass es mit einer Klassenmethode geht, ist klar. Was mir jedoch nicht gnaz klar ist, ist wieso der Zurgiff auf self nicht funktioniert: Wenn ich mich nicht irre steht self doch immer im Register EBX, und EBX wurde doch nicht verändert, müsste doch also in TOpa.MeinName immer noch auf das gleiche Objekt verweisen. Löscht call automatisch die Register, oder wie?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 10:01 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