Autor Beitrag
Marco D.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: Do 09.08.07 09:50 
Ich wollte mich über die Schlüsselwörter abstract, override und static informieren und habe hier nachgeschaut.
Also:
Wenn in der Mutterklasse eine Methode als abstract deklariert ist, muss in der Tochterklasse selbige als override deklariert werden und kann dann überschrieben werden.
Und virtual erlaubt das Überschreiben erst. Gibt es auch abstrakte Methoden, die nicht virtuell sind?

_________________
Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot


Zuletzt bearbeitet von Marco D. am Do 09.08.07 10:10, insgesamt 1-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 09.08.07 09:54 
Ja, einfach das "abstract" weglassen ;-)

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
TParent = class
public
  procedure DoFoo; virtual;
end;

TChild = class
public
  procedure DoFoo; override;
end;

...

procedure TParent.DoFoo;
begin
  ShowMessage('TParent.DoFoo');
end;

procedure TChild.DoFoo;
begin
  ShowMessage('TChild.DoFoo');
end;

...


var
  something : TParent;
begin
  something := TChild.Create;
  something.DoFoo; // Ergibt 'TChild.DoFoo'
  TParent(something).DoFoo; //Ergibt 'TParent.DoFoo'
end;

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Do 09.08.07 10:00 
user profile iconChristian S. hat folgendes geschrieben:
Ja, einfach das "abstract" weglassen ;-)

Lesen, Christian, lesen ;)
user profile iconMarco D. hat folgendes geschrieben:
Gibt es auch abstrakte Methoden, die nicht virtuell sind?


Nein, kann es nicht geben. Da ja wie du festgestellt hast abstract überschrieben werden muss, und dass durch virtual erst erlaubt werden muss. Ansonsten würde immer die abstrakte Methode aufgerufen werden, was dann schöne 'Abstrakte Fehler' (dämliche Übersetzung...) geben würde.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Marco D. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: Do 09.08.07 10:01 
Okay thx.
Es gibt aber virtuelle Methoden, die nicht abstrakt sind? Das zeigt ja Christians Posting :?:

_________________
Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 09.08.07 10:05 
user profile iconMartok hat folgendes geschrieben:
user profile iconChristian S. hat folgendes geschrieben:
Ja, einfach das "abstract" weglassen ;-)

Lesen, Christian, lesen ;)
Hab ich - und zwar den Titel des Threads.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Do 09.08.07 10:08 
Mist...
ich hab mich so gefreut, dich mal korrigieren zu dürfen, und nun das... pfui, Marco ;)

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Marco D. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: Do 09.08.07 10:10 
user profile iconMartok hat folgendes geschrieben:
Mist...
ich hab mich so gefreut, dich mal korrigieren zu dürfen, und nun das... pfui, Marco ;)

Was meinst du? :mrgreen:

_________________
Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 09.08.07 10:12 
user profile iconMartok hat folgendes geschrieben:
ich hab mich so gefreut, dich mal korrigieren zu dürfen, und nun das
Wenn's Dir soviel bedeutet, darfst Du jetzt gerne schreiben, dass ich vergessen habe, something wieder freizugeben ;-)

@Marco: Hey, das ist jetzt aber fies! :motz:

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Do 09.08.07 11:01 
Du hast something nicht wieder freigegeben :mecker:

:rofl:

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 09.08.07 11:02 
Mist, Du hast Recht. :-( Ich werd's beim nächsten Mal besser machen :oops:

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: Do 09.08.07 12:48 
Nun ja der vollständigkeit halber. Meines Wissens kann man bei abstract auch dynamic verwenden. Kommt aber abgesehen von der internen Behandlung so ziemlich aufs gleiche hinaus.
In der Delphi Hilfe dazu steht glaube ich auch, dass abstract ohne virtual oder dynamic nicht viel Sinn macht. Denn mit abastract will man ja gerade ein Klassenspeziefisches Tochterverhalten erzwingen im Gegensatz zum erben der allgemeinen Parentfunktion. Speziefisches Verhalten geht dann aber nur mit virtual oder dynamic.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 10.08.07 12:32 
@Christian: Der Hinweis, dass Du hättest lesen sollen, war schon berechtigt, da gefragt wurde "ABSTRACT, aber nicht VIRTUELL", und nicht nach "VIRTUELL und nicht ABSTRACT"...

Ansonsten hier mal noch ein Hinweis an die ganzen anderen, die wieder mal die DOH nicht gelesen haben und auch sonst ihr Halbwissen zum besten geben:
Delphi Online-Hilfe:
Eine abstrakte Methode ist eine virtuelle oder dynamische Methode, die nicht in der Klasse implementiert wird, in der sie deklariert ist. Die Implementierung wird erst später in einer abgeleiteten Klasse durchgeführt. Bei der Deklaration abstrakter Methoden muss wie im folgenden Beispiel die Anweisung abstract nach virtual oder dynamic angegeben werden:

ausblenden Delphi-Quelltext
1:
procedure DoSomething; virtual; abstract;					


Eine abstrakte Methode kann nur in einer Klasse (bzw. Instanz einer Klasse) aufgerufen werden, in der sie überschrieben wurde.


Womit gezeigt wäre: JA, es gibt abstracte Methoden, die nicht virtual sind, nämlich genau dann, wenn sie dynamic sind ;-)

MfG,
BenBE.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 10.08.07 13:00 
user profile iconBenBE hat folgendes geschrieben:
@Christian: Der Hinweis, dass Du hättest lesen sollen, war schon berechtigt,
Der Titel war vorher andersrum und wurde erst nach meinem Posting editiert. Deswegen schrieb ich, dass ich den Titel gelesen hätte.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".