Posso creare una variabile di tipo classe base.
A questa variabile posso attribuire l'oggettoistanza di una classe derivata.
Triangolo mioTriangolo(3,4); Rettangolo vrbl; vrbl=mioTriangolo;Il codice funziona.
Adesso creo una classe Foo, che non fa parte della "famiglia":
class Foo{ protected: int ciccia; public: Foo(int c){ ciccia=c; } };E vediamo se una variabile di tipo Rettangolo (classe base) può accettare un valore di un'istanza della classe Foo.
Triangolo mioTriangolo(3,4); Foo mioFoo(3); Rettangolo vrbl; vrbl=mioFoo;
1>------ Inizio compilazione: Progetto: test1, Configurazione: Debug Win32 ------ 1> foglio.cpp 1>c:\users\antonello\documents\visual studio 2010\projects\test1\test1\foglio.cpp(42): error C2679: '=' binario: non è stato trovato alcun operatore che accetti un operando destro di tipo 'Foo'. È anche possibile che non vi siano conversioni accettabili. 1> c:\users\antonello\documents\visual studio 2010\projects\test1\test1\foglio.cpp(16): potrebbe essere 'Rettangolo &Rettangolo::operator =(const Rettangolo &)' 1> durante la ricerca di corrispondenza con l'elenco di argomenti '(Rettangolo, Foo)' ========== Compilazione: 0 completate, 1 non riuscite, 0 aggiornate, 0 ignorate ==========Ecco: non è possibile una conversione.
Posso quindi creare una variabile di tipo classe base e attribuire un oggetto istanza di una classe derivata, ma non posso attribuire un oggetto istanza di una classe diversa.
E vediamo se posso creare una variabile di tipo classe derivata e attribuirle un oggetto istanza di una classe base
Rettangolo mioRettangolo(3,4); Triangolo vrbl; vrbl=mioRettangolo;
1>------ Inizio compilazione: Progetto: test1, Configurazione: Debug Win32 ------ 1> foglio.cpp 1>c:\users\antonello\documents\visual studio 2010\projects\test1\test1\foglio.cpp(42): error C2679: '=' binario: non è stato trovato alcun operatore che accetti un operando destro di tipo 'Rettangolo'. È anche possibile che non vi siano conversioni accettabili. 1> c:\users\antonello\documents\visual studio 2010\projects\test1\test1\foglio.cpp(27): potrebbe essere 'Triangolo &Triangolo::operator =(const Triangolo &)' 1> durante la ricerca di corrispondenza con l'elenco di argomenti '(Triangolo, Rettangolo)' ========== Compilazione: 0 completate, 1 non riuscite, 0 aggiornate, 0 ignorate ==========No: l'inverso non si può fare.
Nessun commento:
Posta un commento