Non capisco perché per un compito una classe derivata non chiami l'operatore corrispondente della classe base, se la sua non esiste. Guarda il codice:Operatore di assegnazione C++ nella classe derivata
#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;
}
Come è il codice non viene compilato. Naturalmente se definisco un "operator =" per B identico a quello per A, tutto funziona, ma perché B "operator =" non viene chiamato di default se quello nella classe derivata non è definito ?? Potresti aiutare a far luce su questo problema?
Il compilatore gcc dice ../src/tito.cpp:40:4: errore: non valido sovraccarico '=' pp = 0,0; ~~^~~~ ../src/tito.cpp:28:7: nota: la funzione candidata (l'operatore di assegnazione implicita della copia) non è valida: nessuna conversione nota da "double" a "const B" per 1o argomento classe B: pubblico A { ^ 1 errore generato.
Puoi spiegare perché non funziona?
Sì, la ragione principale è 'operatore di quel genitore =' non assegna parte del bambino in modo implicito ad usarlo può easilly creare oggetti rotti. – StenSoft
Grazie per il commento molto utile !! – Max