Überschreiben (Überladen?) einer nichtvirtuellen Funktion mit unterschiedlicher Signatur?
-
Hallo.
Schaut euch bitte mal folgenden Code an:
class Base { protected: int A; public: void sayit() const { cout << A << endl; } Base() :A(3) {} }; class Derived : public Base { private: int B; public: void sayit(int a) const { cout << B << endl; } Derived() :B(7) {} }; int main() { Base b; Derived d; d.sayit(); d.sayit(4); }
Meine Frage nun: Wird hier überschrieben, weil der Compiler (g++3.2) meldet:
virtualtest.cpp: In function `int main()': virtualtest.cpp:31: no matching function for call to `Derived::sayit()' virtualtest.cpp:21: candidates are: void Derived::sayit(int) const
Und wenn ja, warum? Warum wird hier nicht einfach geerbt, es handelte sich ja dann in der abgeleiteten Klasse lediglich um einfache überladene Memberfunktionen.
Achso: Ich weiss, schon, dass man normalerweise keine nicht-virtuellen Memberfunktion überschreiben soll, wollte es nur mal testen.
-