构造函数 析构函数 的继承与虚拟问题 & 虚函数 纯虚函数

构造函数:可以被继承,不能是虚拟的。

1.如果基类中无构造函数,子类中可不定义构造函数,均使用默认的构造函数。

2.如果基类中有无参构造函数,子类中可不定义构造函数,继承基类的无参构造函数。

3.如果基类中只有带参数的构造函数,子类中必须继承基类构造函数,并传递参数初始化。

派生类构造函数构造顺序:

1.调用基类构造函数。

2.调用内嵌对象所在类的构造函数。

3.调用派生类的构造函数。

比如:

class Base
{
public:
 Base()
 {
  cout<<"base构造函数"<<endl;
 }
 ~Base()
 {
  cout<<"base析构"<<endl;
 }
};
class DDD
{
public:
 DDD()
 {
  cout<<"DDD构造"<<endl;
 }
 ~DDD()
 {
  cout<<"DDD析构"<<endl;
 }
};
class Son:public Base
{
private:
 DDD d;
public:
 Son()
 {
  cout<<"son构造"<<endl;

 }
 ~Son()
 {
  cout<<"son析构"<<endl;
 }
};
int _tmain(int argc, _TCHAR* argv[])
{
 
Son* s=new  Son;
delete s;
 system("pause");
 return 0;
}

执行结果:

base构造函数
DDD构造
son构造
son析构
DDD析构
base析构

析构函数:默认的完全继承,最好是虚拟的。

虚函数与纯虚函数:

因为通常是通过基类的指针去析构一个对象,定义为virtual,可以去执行子类的构造函数。

纯虚函数是在基类中声明的函数,在函数形参表后加=0;

含有纯虚函数的类成为抽象基类,不能被实例化,必须在所有派生类中实现纯虚函数。

只包含虚函数的基类不能成为抽象类。

 

 

posted @ 2013-04-21 15:32  成长的点点滴滴  阅读(219)  评论(0)    收藏  举报