1 派生类的合成默认构造函数与非派生的构造函数有有一点不同,除了初始化派生类的数据成员之外,它还初始化派生类对象的基类部分,基类部分由基类的默认构造函数初始化。
2 派生类构造函数的初始化列表只能初始化派生类的成员,不能直接初始化继承成员,相反,派生类构造函数通过将基类包含在构造函数初始化列表中开间接初始化继承成员。并且一个类只能初始化直接基类。如果派生类显式定义了自己的复制构造函数或赋值操作符,
3 判断调用的是复制构造函数还是赋值操作符OPERATOR=的关键或者说标志,应该是该对象是否已经创建.如果没有创建的话,那么调用的必然是复制构造函数,否则就是赋值操作符OPERATOR=.为什么呢?在C++创建一个对象之前,在调用构造函数之前,他需要先初始化成员数据,而一旦没有初始化,显然是不能调用赋值操作符OPERATOR=的。并且如果调用赋值操作符赋值的话,如果没有重载赋值操作符,则会调用合成的赋值操作符,与合成的复制构造函数是类似的。如果初始化的时候没有复制构造函数,则会调用默认的合成复制构造函数。
class bb
{
public:
int a;
char b;
string c;
bb()//默认构造函数
{}
bb(const bb & b1)//复制构造函数
{
a=b1.a;
}
bb &operator=(const bb & b1)//重载赋值操作符
{
a=b1.a;
return *this;
}
};
如果bb a1;
bb a2=a1;//此处调用复制构造函数,因为是初始化(如果没有,则调用合成的赋值构造函数,默认的)
如果bb a1;
bb a2;
a2=a1;//调用重载的赋值操作符,如果没有,则调用合成的重载操作符(即默认的)