class Base
{
public:
int i;
Base()
{
cout<<"Base Constructor"<<endl;
}
Base (Base& b)
{
cout<<"Base Copy Constructor"<<endl;
i = b.i;
}
~Base()
{
cout<<"Base Destructor"<<endl;
}
void val()
{
cout<<"i: "<< i<<endl;
}
};
class Derived: public Base
{
public:
int i;
Derived()
{
Base::i = 5;
cout<<"Derived Constructor"<<endl;
}
/*Derived (Derived& d)
{
cout<<"Derived copy Constructor"<<endl;
i = d.i;
}*/
~Derived()
{
cout<<"Derived Destructor"<<endl;
}
void val()
{
cout<<"i: "<< i<<endl;
Base::val();
}
};
Si lo hago Derivado d1; Derivado d2 = d1; Se llama al constructor de copia de base y se llama al constructor de copia predeterminado de derivada.Constructor de copia base no llamado
Pero si elimino los comentarios del constructor de copia derivado no se llama al constructor de copia base. ¿Hay alguna razón específica para esto? Gracias de antemano.
IMVHO http://www.parashift.com/c++faq-lite/ctors.html es un recurso increíble para entender los constructores de C++. (Y de hecho, C++ FAQ Lite en general es una increíble fuente de información para principiantes avanzados.) – notJim
Creo que el destructor base debe ser virtual. –