1. El orden de herencia;
#include<iostream>
using namespace std;
class AAA
{
public:
AAA(){
cout<<"AAA"<<endl;
}
};
class BBB
{
public:
BBB(){
cout<<"BBB"<<endl;
}
};
class CCC: public BBB , AAA
{
public:
CCC(){
cout<<"cccc"<<endl;
}
};
int main()
{
CCC c1;
return 0 ;
}
Resultado de salida:
./a.out
BBB
AAA
cccc
2. El orden de declaración:
#include<iostream>
using namespace std;
class AAA
{
public:
AAA(){
cout<<"AAA"<<endl;
}
};
class BBB
{
public:
BBB(){
cout<<"BBB"<<endl;
}
};
class CCC
{
public:
CCC():a1(),b1(){
cout<<"cccc"<<endl;
}
BBB b1;
AAA a1;
};
int main()
{
CCC c1;
return 0 ;
}
Resultado de salida:
./a.out
BBB
AAA
cccc
3. El papel de la lista de inicialización:
-
Los miembros constantes, debido a que las constantes solo se pueden inicializar y no se pueden asignar, deben colocarse en la lista de inicialización.
-
Para los tipos de referencia, las referencias deben inicializarse cuando están definidas y no pueden reasignarse, por lo que también deben escribirse en la lista de inicialización.
-
No hay un constructor predeterminado para el tipo de clase, porque la lista de inicialización se puede inicializar sin llamar al "constructor predeterminado + operador de asignación de copia", sino directamente llamando al "constructor de copia".
referencia: