Nie do końca rozumiem, dlaczego dla przypisania klasa pochodna nie wywołuje odpowiedniego operatora klasy bazowej, jeśli jej własna nie istnieje. Spójrz na kod:Operator przypisania C++ w klasie pochodnej
#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;
}
Ponieważ jest to kod nie kompiluje. Oczywiście jeśli zdefiniuję "operator =" dla B identycznego z tym dla A, wszystko działa, ale dlaczego operator "B =" nie jest wywoływany domyślnie, jeśli ten w klasie pochodnej nie jest zdefiniowany? Czy możesz pomóc rzucić nieco światła na tę kwestię?
Kompilator gcc mówi ../src/tito.cpp:40:4: error: no realable overloaded '=' pp = 0,0; ~~^~~~ ../src/tito.cpp:28:7: uwaga: funkcja kandydata (niejawny operator przypisania kopii) nie jest możliwa: brak znanej konwersji z "podwójnej" na "stałą B" dla pierwszego argumentu klasa B: publiczny A { ^ 1 wygenerowany błąd.
Czy możesz wyjaśnić, dlaczego to nie działa?
Tak, głównym uzasadnieniem jest 'operatora, który rodzica =' nie przypisuje udział dziecka tak niejawnie przy użyciu może easilly tworzyć niedziałających obiektów. – StenSoft
Dziękuję za bardzo przydatny komentarz !! – Max