[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