[linux-l] virtual class (was: C++ - <vector> ...)
Axel Weiß
aweiss at informatik.hu-berlin.de
Do Jun 2 17:51:14 CEST 2005
Am Donnerstag, 2. Juni 2005 16:20 schrieb Oliver Bandel:
> 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?
Ich kenne Objective-C (noch) nicht, darum kann ich diese Frage nicht
beantworten.
Es gibt aber einen entscheidenden Unterschied zwischen 'eine Methode
überschreiben' und 'eine virtuelle Methode (re)implementieren'. Ein
Beispiel:
class A{
public:
virtual void f();
void g();
};
class B: public A{
public:
void f();
void g();
};
A a;
B b;
A &c = b;
a.f() ruft A::f()
a.g() ruft A::g()
b.f() ruft B::f()
b.g() ruft B::g()
c.f() ruft B::g() <-
g.g() ruft A::g() <-
Wie sagt man dieses Beispiel in Objective-C?
Axel
--
Humboldt-Universität zu Berlin
Institut für Informatik
Signalverarbeitung und Mustererkennung
Dipl.-Inf. Axel Weiß
Rudower Chaussee 25
12489 Berlin-Adlershof
+49-30-2093-3050
** www.freesp.de **
Mehr Informationen über die Mailingliste linux-l