[risolto]ereditarietà e overload dell'operatore =

di Anonimizzato3665 il
3 risposte
Vi pongo una questione tecnica piuttosto fine, per i guru del c++.
Considerate le classi:

class CPadre
{
  int dato1;
...
public:
  CParde& operator = (const CPadre &src);
...
};

class CFiglia : public CPadre;
{
  int dato2;
...
public:
  CFiglio& operator = (const CFiglio &src);
...
}

...

CPadre & CPadre::operator = (const CPadre &src)
{
  dato1 = src.dato1;
  return *this;
}

Ora veniamo all'implementazione dell'operatore della classe CFiglio. Io vorrei che:

3 Risposte

  • Devi forzare un upcast da figlio a padre nell'operatore = del figlio.
    
       CFiglio& operator= (const CFiglio& p) {
           *( static_cast<CPadre*>(this) ) = p;
    	return *this;
    }
    
  • Grazie!

    Giusto per curiosità, non funzionerebbe se usassi il vecchio stile C per il cast?
    
    CFiglio& operator= (const CFiglio& p)
    {
      *(CPadre*)this ) = (CPadre)p;
      return *this;
    }
  • Si, ma questo è C++ non C ed è meglio usare lo static_cast<> al posto del C cast.
Devi accedere o registrarti per scrivere nel forum
3 risposte