Ich verstehe nicht ganz, warum für eine Zuordnung eine abgeleitete Klasse nicht den entsprechenden Betreiber der Basisklasse aufrufen, wenn ihre eigene existiert nicht. Sehen Sie sich den Code an:C++ Zuweisungsoperator in abgeleiteten Klasse
#include <iostream>
using namespace std;
class A{
protected:
void myWrite(){
cout << " Base " <<endl;
}
public:
double x,y;
A(): x{0},y{0}{};
virtual A & operator=(double g){x=g;y=g;return *this;}
virtual ~A(){};
virtual void doneit(){myWrite();}
};
class B: public A{
protected:
public:
B():A(){};
virtual ~B(){};
virtual void doneit(){myWrite();}
};
int main() {
A jj;
B pp;
pp=0.0;
return 0;
}
Wie es ist der Code kompiliert nicht. Natürlich, wenn ich einen "Operator =" für B definiere, der identisch ist mit dem für A, funktioniert alles, aber warum wird der B "operator =" nicht standardmäßig aufgerufen, wenn der in der abgeleiteten Klasse nicht definiert ist? Könnten Sie mir helfen, etwas Licht in dieses Thema zu bringen?
Der GCC-Compiler sagt ../src/tito.cpp:40:4: Fehler: keine brauchbare überladene '=' pp = 0,0; ~~^~~~ ../src/tito.cpp:28:7: Hinweis: Kandidaten-Funktion (die implizite Kopierzuweisungsoperator) nicht durchführbar: keine Konvertierung bekannt aus ‚double‘ auf ‚const B‘ für erste Argument Klasse B: öffentlich A { ^ 1 Fehler generiert.
Können Sie uns erklären, warum es nicht funktioniert?
Ja, der Hauptgrund ist das Mutter 'Operator =' nicht das Kind Teil nicht zuweisen, so implizit mit es easilly gebrochene Objekte erstellen können. – StenSoft
Vielen Dank für den sehr nützlichen Kommentar !! – Max