Ü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.




Anmelden zum Antworten