View Full Version : [c++]ereditarietà e ridefinizione degli operatori
class Mystring: public std::string{
public:
Mystring(){
}
};
int main()
{
Mystring a,b;
a=b;
Mystring s;
s = "mamma";
}
compilando questo codice ottengo:
error: no match for 'operator=' in 's = "mamma"'
Come mai funziona il primo assegnamento e non il secondo? Non vengono ereditati gli operatori ridefiniti? (in questo caso parlo di quelli ridefiniti in std::string). Ma allora come mai funziona il primo assegnamento?Viene utilizzata la copia di default membro a membro?
Si ma io posso fare questo:
std::string st = "babbo";
Mi sembra strano che non si possa fare con Mystring
Si ma io posso fare questo:
std::string st = "babbo";
Mi sembra strano che non si possa fare con Mystring a me sembra perfettamente normale invece: la tua classe Mystring non ha nessun costruttore con un argomento di tipo const char*, che è quello che verrebbe usato da quel tipo di inizializzazione.
Come al solito ho trovato un esempio sbagliato e vi sto confondendo.
Non parlavo del costruttore ma dell'opearatore =
Con la classe std::string posso fare:
std::string a;
a = "mamma";
Ma non posso farlo con la classe Mystring, perchè? Immagino che la classe std::string abbia una funzione tipo operator= ( const char * str ), questa funzione non dovrebbe essere ereditata da Mystring?
banryu79
15-07-2008, 14:54
Ma non posso farlo con la classe Mystring, perchè? Immagino che la classe std::string abbia una funzione tipo operator= ( const char * str ), questa funzione non dovrebbe essere ereditata da Mystring?
No, l'assignement operator della classe base non viene ereditato dalla sottoclasse: se nella sottoclasse non viene fatto l'overloading esplicito dell'assignement operator della classe base allora quest'ultimo viene "nascosto" dal copy assignement operator.
Se vuoi fare
Mystring mst = "babbo";
allora devi fare l'overloading dell'operator.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.