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

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

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

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

父类没有声明构造函数

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

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

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

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

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

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

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

#include <iostream.h>  
 class animal  
 {  
 public:  
   animal(int height, int weight)  
   {  
     cout<<"animal construct"<<endl;  
   }  
   …  
 };  
 class fish:public animal  
 {  
 public:  
   fish():animal(400,300)  
   {  
     cout<<"fish construct"<<endl;  
   }  
   …  
 };  
 void main()  
 {  
   fish fh;  
 }  

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

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值