关于派生类的复制构造函数的调用问题
先看程序:
[code=C/C++][/code]class Base
{
public:
Base(int i = 0):ival(i){}
~Base(){}
Base(const Base& b):ival(b.ival){}
int ival;
};
class Derived:public Base
{
public:
Derived(int i = 0,int j = 0):ivald(i),Base(j){}
~Derived(){}
Derived(const Derived& d)
{
Base::Base(d);
ivald = d.ivald;
}
int ivald;
};
int main(int argc, char** argv)
{
Derived d1;
Derived d2(d1);
return 0;
}
在单步调试的时候,Derived d2(d1);先调用的是Derived的复制构造函数,这个函数隐式调用Base的构造函数,然后才调用Base的复制构造函数,然后完成Derived的复制构造函数的其他操作。
可是我不明白:调用Base的构造函数是为了干什么?
[解决办法]
构造顺序是 先构造基类,再构造子类,Derived 构造时会自动调用基类的构造 ,那个函数内部的Base::Base(d)给你造成了干扰,去掉这一句,你会发现照样会进入Base的构造函数。