Virtuelle funktionen ableiten????
-
HAbe Basisklasse A, und möchte da funkA in B und C ableiten, allerdings hat die funktion in C zusätzlich Parameter.. geht das?
Folgendes Beispiel:
class A { virtual void FunkA(){}; }; class B : public A{ void FunkA(){.........}; }; class C: public A{ void FunkA(Parameter){.....}; };
-
Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
class A { virtual void FunkA(){}; // Falls das keine Implementation in dieser Klasse hat/braucht, dann mach die Funktion rein virtuell //(Dann _muss_ jede abgelittene Klasse aber auch eine eigene Implementation //mitbringen falls sie instanziert werden soll): virtual void FunkA()=0; }; class B : public A { virtual void FunkA(){/*.........*/}; }; class C: public A { // Entweder ne eigene Implementation virtual void FunkA(){/*...*/} // oder aber die aus der Basisklasse verwenden (Die wird durch FunkA // mit Parameter afaik sonst überdeckt) using void A::FunkA(); void FunkA(Parameter){/*.....*/}; };Ich versteh zwar nicht den Sinn davon, aber was solls... entweder in deinem Klassendesign stimmt was nicht oder aber du solltest die Funktion FunkA(Parameter) auch in A als (rein) virtuell deklarieren, sonst ergibt das ja nicht viel Sinn.
Um auf deine Frage direkt zu antworten: So wie du dir das vorstellst geht das nicht.
[edit: dieser Beitrag wurde unter den ersten Ausfallerscheinungen aufgrund von Müdigkeit verfasst]
-
BorisDieKlinge schrieb:
...geht das?...
Ist die Frage, was Du unter "geht" verstehst:
+ Das ist korrekte Syntax und
+ Jedes C-Objekt hat dann auch eine Funktion void FunkA(Parameter)
- aber leider entweder (ohne "using") statt der Funktion void FunkA(void)
- oder (mit "using") zusätzlich zur Funktion void FunkA(void)
- man kann natürlich keine "Basisklassen-Pointer-Polymorphie" mit "void FunkA(Parameter)" machen.A* a = new C; Parameter p; p->FunkA(p); // => Compilefehler: Funktion nicht definiert. p->FunkA(); // tut's und ruft C::FunkA() auf. ...=> Was Du da machst, ist "overloading" und nicht "overriding".
Gruß,
Simon2.
-
Das dumme ist nur das er die "orginal" Funktion überdeckt. Und sowas sollte niemals bei öffentlicher Vererbung geschehen.
grüße
-
David_pb schrieb:
Das dumme ist nur das er die "orginal" Funktion überdeckt. Und sowas sollte niemals bei öffentlicher Vererbung geschehen.
grüße
Stimmt !!
Hatte mich auf die using-Version bezogen !
Hab's korrigiert.Gruß,
Simon2.