[Klasse] virtual void
-
class Base { public: virtual void Test() = 0; }; class One : public Base{ }; void One::Test(){};wollte ne virtuelle Funktion vererben, er meldet aber
error C2509: 'Test' : member function not declared in 'One'was ging schief
mfG
-
class Base { public: virtual void Test() = 0; }; class One : public Base{ void Test();//virtual in Base }; void One::Test(){};
-
danke aber ich dachte wenn ich in der basisklasse ne virtuelle funktion definiere, brauch ich bei allen abgeleiteten klassen diese nicht in deklarationsteil wieder hinzuschreiben?!
-> soclass base { virtual void bla(); }; class derivat : public base {}; void derivat::bla() {};geht das net so?
-
geht ja so offensichtlich nicht ...
Ist ja auch logisch, da du ja die Methode nicht implementieren musst. Du könntest ja auch nur eine weitere abstrakte Klasse erzeugen. Außerdem dient dies der Übersicht.
-
_carnage schrieb:
danke aber ich dachte wenn ich in der basisklasse ne virtuelle funktion definiere, brauch ich bei allen abgeleiteten klassen diese nicht in deklarationsteil wieder hinzuschreiben?!
Bei einfachen virtuellen Methoden stimmt das - aber du hast dort eine PUR virtuelle Methode, und die MUSST du in allen abgeleiteten Klassen neu deklarieren (wenn du sie konkret einsetzen willst).
(wenn du eine Methode aufrufen willst, brauchst du etwas, was du aufrufen kannst - und das "virtual void Test() =0;" besagt, daß dort nichts ist ;))
-
_carnage schrieb:
class base { virtual void bla(); }; class derivat : public base {}; void derivat::bla() {};geht das net so?
Nein, du musst dem Compiler mitteilen dass du bla überschreiben willst.
CStoll schrieb:
(wenn du eine Methode aufrufen willst, brauchst du etwas, was du aufrufen kannst - und das "virtual void Test() =0;" besagt, daß dort nichts ist ;))
Ja? Dann muss mein Compiler kaputt sein, denn er lässt folgendes unbeanstandet durchgehen:
struct foo { virtual void bar() = 0; }; void foo::bar() { }
-
Ich zitiere mal meinen Prof.:
Zweck der Spezifikation einer rein virtuellen Methode ist die Vererbung der Spezifikation.
Zweck von virtuellen Methoden ist die Bereitstellung der Spezifikation und der Standardimplementation für die abgeleitete Klasse, die verändert werden sollen.
Zweck einer nicht virtuellen Methode ist die Bereitstellung von Spezifikation und Implementation. Sie dürfen nicht verändert werden.