Überladene virtuelle Member und vererbung
-
Hi,
ich habe eine Klasse:
class base { public: virtual int A(void){...}; virtual int A(int){...}; };;
Und nehme diese als basis für eine neue klasse:
class derived:base { public: virtual int A(void){...}; };Und nun will ich über den parametrisierten Member des derivats aufrufen:
derived test; test.A(1); //error C2660Das wird mir mit der Fehlermeldung C2660 quittiert, egal ob ich in der basis die Methode A als virtuell declariere oder nicht (Ok,.. wird dann so oder auf grund der ersten virtuell declaration auch der überladene member polymorph,... oder?? )
Muss ich bei Declaration dann alle Member mit den gleichen namen erneut declarieren und definieren ???
grüße und dank
-
Ja. Wenn Du eine überladene Methode überschreibt, werden die anderen überladenen Versionen verloren. Neudeklaration genügt, Neudefinition ist nicht erforderlich.
-
EDIT: Gut zu wissen, Belli...
Der Weg ist natürlich schöner...
-
Belli schrieb:
... Neudeklaration genügt, Neudefinition ist nicht erforderlich....
Ist das wirklich so?
-
Ich ziehe meine Frage zurück.

-
zeusosc schrieb:
(Ok,.. wird dann so oder auf grund der ersten virtuell declaration auch der überladene member polymorph,... oder?? )
Nö, wird er nicht.
Belli schrieb:
Neudeklaration genügt
Verstehe ich nicht. Wie soll diese Neudeklaration denn aussehen?
Ich hätte da jetzt zu einem 'using base::A' geraten.
-
Jockelx schrieb:
...Verstehe ich nicht. Wie soll diese Neudeklaration denn aussehen? Ich hätte da jetzt zu einem 'using base::A' geraten.
Bellis Aussage hat mich zuerst auch verwirrt, aber vielleicht hat er mit "Neudeklaration" genau das gemeint???
-
Hi,..
erstmal danke für eure antworten...
mit Neudeklaration ist gemeint:
class derived:base { public: virtual void A(void); virtual void A(int); }und mit Neudefinition ist gemeint:
void derived::A() {...}; void derived::A(int i) {...};Also ich habe es mal mit der neudeklaration getestet,.. mein linker meckert dann das er das nicht auflösen kann,.. anscheinend muss ich das dann auch neudefinieren,..
Trozdem danke leute :xmas1:
-
mit Neudeklaration ist gemeint:
Da das aber nicht funktioniert, könnte ja sein, dass er mit Neudeklaration was anderes meinte.
Aber wie gesagt, using base::A ist eigentlich das übliche Vorgehen.
-
Jo funktioniert mit using...
aber ich bekomme langsam ne kriese mit dem VS2008 pro und IntelliSense,...
Mehrere Source und header files mit den gleichen namespace und vererbung,.. der will einfach nicht die Memberdefinitionen in den sources finden,..

Aber das ist bestimmt thema eines anderen threads,...
greetz und thx
-
Du könntest auch mal Visual Studio 2010 versuchen, die Zuverlässigkeit von IntelliSense wurde stark verbessert. Auch sonst sind ein paar nette Features dazugekommen. Die Express-Version gibts wieder kostenlos.
Was ich bei der 2008er-Version immer gemacht habe, war das Löschen der .ncb-Datenbanken, damit IntelliSense wieder besser lief.