在C++中子类继承和调用父类的构造函数方法

如果没有显式的构造函数,编译器会给一个默认的构造函数,并且该默认的构造函数仅仅在没有显式地声明构造函数情况下创建。

构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。

如果声明了任何非默认构造函数,编译器不会提供默认构造函数。

父类没有声明构造函数

父类会由编译器生成默认构造函数,子类先调用父类默认的构造函数,再调用自己的构造函数。

父类只声明了无参构造函数

如果子类的构造函数没有显式地调用父类的构造函数,则将会隐式调用父类的无参构造函数。

父类只声明了带参构造函数

如果父类只有有参数的构造方法,则子类必须显示调用此带参构造方法。

父类同时声明了无参和带参构造函数

子类只需要实现父类的一个构造函数即可,不管是无参的还是带参的构造函数。如果子类的构造函数没有显示地调用父类的构造函数,则默认调用父类的无参构造函数。

#include   
 class animal  
 {  
 public:  
   animal(int height, int weight)  
   {  
     cout<<"animal construct"<

补充:构造函数和析构函数的顺序
当在基类的构造函数中申请了资源的时候,派生类继承了基类,也就基础了基类的构造函数。所以析构的时候也要调用基类的析构函数。构造和析构的顺序是相反的。构造时,基类先构造,然后再派生类。析构时则反过来。先调用派生类的析构,再调用基类的析构。这符合资源栈的操作。先进后出,先申请的资源后释放

你可能感兴趣的:(#,多态与继承,构造函数,析构函数)