Libero di pensarla come vuoi.
Resta il fatto che il codice ancora non compila.
Il perché nei commenti.
class A
{
public :
/* "Y" è una stringa, non un carattere. Corretto è
A () : x (0) , y ('Y') {} con singoli apici, non doppi
*/
A () : x (0) , y ("Y") {}
~A () {}
friend ostream & operator << (ostream & out , const A & a )
{
out << "Parametro x " << a.x << "\nParametro y " << a.y ;
return out ;
}
/* i parametri private di A non sono accessibili da B.
Devono almeno essere protected
*/
private :
int x ;
char y ;
};
class B : public A
{
public :
/* a parte il fatto che manca il costruttore parametrico in a,
si devono passare valori al costruttore, non tipi di dato.
Questa cosa B () : A (int _x , char _y) , z (1) {} non ha senso.
Corretto sarebbe:
B () : A (10 , 'c') , z (1) {}
*/
B () : A (int _x , char _y) , z (1) {}
private :
friend ostream & operator << (ostream & out , const B & b )
{
out << "Parametro x " << b.x << "\nParametro y " << b.y <<"\nParametro z" << b.z ;
return out ;
}
unsigned z ;
}
Se vuoi il comportamento che ti interessa devi aggiungere una funzione polimorfa alla quale passare solo ostream&.
Riveduto e corretto il tutto diventa:
#include <iostream>
using namespace std;
class A
{
public:
A() : x(0), y('Y') {}
A(int _x, char _y) : x(_x), y(_y) {}
virtual ~A() {}
friend ostream & operator << (ostream & out, const A & a)
{
a.print(out);
return out;
}
protected:
int x;
char y;
virtual void print(ostream& out) const {
out << "Parametro x " << x << "\nParametro y " << y;
}
};
class B : public A {
public:
B() : A(10, 'B'), z(1) {}
private:
virtual void print(ostream& out) const {
out << "Parametro x " << x << "\nParametro y " << y << "\nParametro z" << z;
}
unsigned z;
};
int main(int argc, char* argv[]) {
A* var = new B();
cout << *var;
delete var;
}
comunque se bisogna essere fiscali vedi che hai letto male perchè var è il nome della VARiabile puntatore che punta ad un oggetto di tipo A quindi leggi meglio
Oh, io ho letto benissimo. Tanto più che errori simili si sgamano in 0,1 petosecondi dato che molta gente (agli inizi) pensa che basti agire su un puntatore per ottenere l'effetto che vuole.
Alla prossima