In meinem Code aufrufen, ich habe diese Klassen implementiert:C++: ein Kind Methode von den Eltern Instanziierung
class A
{
public:
virtual int fun() { return 0; }
}
class B : public A
{
public:
virtual int fun() { return 1; }
}
Und diese Funktionen:
void operation(A a)
{
printf("%d\n",a.fun());
}
int main()
{
B b;
operation(b);
return 0;
}
Wie Sie sehen können, die Klasse B erbt von A und implementiert die virtuelle geerbte Methode fun()
. Die Hauptklasse ruft eine Funktion auf, die ein A in Parameter akzeptiert und die fun()
-Methode mit einem B-Objekt in Argument aufruft.
Bei der Ausführung erwarte ich, dass die Zeichenfolge "1"
gedruckt werden, aber es ist "0"
, das ist (auch wenn es sich um ein B-Objekt ist, das zu operation()
geben wird).
Ich muss dies tun, weil ich mehrere B-Klassen (B1, B2, etc ...) habe und ich möchte, dass die Funktion generisch ist. Ich brauche nicht die Umsetzung der operation()
in der Klasse A, aber wenn ich operation()
rein virtuelle erklären, schlägt die Kompilierung bei operation()
sagen, dass ich nicht ein instanziiert kann (es ist durchaus zu erwarten).
Ich habe viele Themen sprechen über Eltern/Kind-Methoden Anrufe und Vererbung gefunden, aber keiner von ihnen über dieses Problem gerade gesprochen.
Kann mir jemand helfen?
Danke.
Vorsicht: Für die Standardkonstruktion eines Objekts dürfen Sie keine Klammern verwenden. 'B b()' ruft nicht 'B's Standard-c'tor auf, sondern deklariert eine Funktion' b', die keine Argumente annimmt und ein Objekt der Klasse 'B' zurückgibt. –
Es ist nur ein Fehler, den ich gemacht habe, als ich dieses vereinfachte Codebeispiel schrieb – Vultrao