sabato 12 luglio 2014

Variabili oggetto di classi base e derivate.

Quindi, riepiloghiamo.

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