【发布时间】:2009-10-01 04:44:08
【问题描述】:
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();
}
};
如果我这样做 导出d1; 导出 d2 = d1; 调用base的拷贝构造函数,调用derived的默认拷贝构造函数。
但是,如果我从派生的复制构造函数中删除 cmets,则不会调用基本复制构造函数。这有什么具体原因吗? 提前致谢。
【问题讨论】:
-
IMVHO parashift.com/c++-faq-lite/ctors.html 是了解 C++ 构造函数的绝佳资源。 (事实上,对于高级初学者来说,C++ FAQ Lite 是一个令人难以置信的信息来源。)
-
我认为你的基础析构函数应该是虚拟的。
标签: c++ inheritance