[linux-l] Re: C++ - <vector> ...

Oliver Bandel oliver at first.in-berlin.de
Do Jun 2 16:20:12 CEST 2005


On Thu, Jun 02, 2005 at 12:51:11PM +0200, Axel Wei wrote:
> Am Mittwoch, 1. Juni 2005 23:18 schrieb Oliver Bandel:
> > "late binding" macht Objective-C z.B. defaultmäßig.
> > Da braucht man keine Extras.
> 
> Das einzige 'Extra' ist das Wörtchen virtual.
> 
> Die (gewollte) Eigenschaft von late binding ist ja, dass Methoden der 
> Basisklasse von erbenden Klassen überschrieben werden. In vielen Fällen 
> ist das aber gar nicht gewollt (aus Sicht der Basisklasse), also muss 
> syntaktisch unterschieden werden. Wie macht man das in Objective-C, 
> eine Methode als Nicht virtuell zu deklarieren?

Der Begriff "virtuelle Klasse" ist mir in Zusammenhang mit Objective-C
nicht untergekommen. Da ich auch kein OO-Spezi bin, sagt mir der Begriff
auch nicht viel. Könnte mich jetzt zwar durch Literatur suchen, die hier
irgendwo rum liegt, aber dafür ist mir das OO-Zeugs dann doch nicht
interessant/wichtig genug (da ich in letzter Zeit meist mit OCaml programmiere
und da eigentlich selten, quasi fast garnicht OO brauche. Bisher ist mir erst
einmal was untergekommen, wo ich das OO-Zeugs ganz praktisch finde. Das
ziehe ich mir rein, wenn das Programmierprojekt wieder akuter wird.
Müsste mir ein paar OO-Sachen dann noch mal rein ziehen. Ansonsten kommt
man mit funktional und imperativ und den Vorzügen des Modulsystems usw.
ganz wunderbar ohne OO-Geraffel aus.).

Wenn ich eine Methode überschreiben will, in Objective-C, dann schreibe
ich eben in der abgeleiteten Klasse eine Methode, die den selben Namen
trägt, wie die Methode der Klasse, von der abgeleitet wird.
Und wenn man das Original noch haben will, kann man da auch drauf zugreifen
(keyword "super" schickt ne Message dann an die entsprechende Methode der
 Parent-Class).

Was soll das keyword "virtuell" machen? Ist es die Umkehrung von Objective-C's
"super"?

Deknen die beiden Sprachen in umgekehrter Richtung?


Ciao,
   Oliver



Mehr Informationen über die Mailingliste linux-l