【转】C++中了类继承和调用父类的构造函数方法

摘要:
如果没有显式构造函数,编译器将给出一个默认构造函数,并且只创建默认构造函数而不显式声明构造函数。这样,当调用子类的构造函数时,系统将使用父类的参数调用构造函数来构造对象。

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

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

构造原则如下:

if(子类没有自定义构造函数){ 
        if(基类没有自定义构造函数){
              用子类定义对象时,先自动调用基类的默认构造函数,再调子类的默认构造函数。
         } else if(基类有自定义无参构造函数){
              用子类定义对象时,先自动调用基类的自定义无参构造函数,再调子类的默认构造函数。
         }else {
              用子类定义对象时,编译提示没有默认构造函数可用
         }
}else if(子类自定义构造函数但没有调用基类的某个构造函数){
        if(基类没有自定义构造函数){
              用子类定义对象时,先自动调用基类的默认构造函数,再调子类的自定义构造函数。
         }else if(基类有自定义无参构造函数){
              用子类定义对象时,先自动调用基类的自定义无参构造函数,再调子类的自定义构造函数。
         }else {
              用子类定义对象时,编译提示没有默认构造函数可用
         }
}

 如果子类调用父类带参数的构造方法,需要用初始化父类成员对象的方式,比如:

   #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;
    }
  };

  int main(){
    fish fh;
      return 0;
  }

     在fish类的构造函数后,加一个冒号(:),然后加上父类的带参数的构造函数。这样,在子类的构造函数被调用时,系统就会去调用父类的带参数的构造函数去构造对象。

免责声明:文章转载自《【转】C++中了类继承和调用父类的构造函数方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇IOS学习之路二十(程序json转换数据的中文字符问题解决)js 监听后退事件及跳转页面下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

StringBuilder 以及 StringBuffer默认大小与扩容

默认值初始化: 1.  首先明确 StringBuffer类与 StringBuilder类均继承了抽象类 AbstractStringBuilder类 无参构造方法 2. 源码中StringBuffer类和StringBuilder类初始化均调用父类的构造方法: 父类初始化: 子类默认传入值16 给父类初始化字符数组   有参构造方法:   扩容...

第14课 移动语义(std::move)

一. std::move (一)std::move的原型 template<typename T> decltype(auto) move(T&& param) //注意,形参是个引用(万能引用) { using ReturnType = typename remove_reference<T&...

ABP 如何创建 BackgroundWorker (后台作业)

1.创建 xxxWorker 作业类,并继承Abp.Threading.BackgroundWorkers.PeriodicBackgroundWorkerBase 基类,与Abp.Dependency.ISingletonDependency 接口 2.申明构造函数。注意:下面的的 Timer 是父类中的,不是构造函数上的 timer 参数。 publi...

创建Java2D图形

创建Java2D图形 下面我们将介绍如何将Swing容器(存放GUI组件的纯黑色面板和框架)变成一块可以在上面绘制字体、颜色、形状和图形的艺术画布。 1、使用Font类 在Java中,颜色和字体使用java.awt包中的Color和Font类来表示。字体使用构造函数Font(String , int , int)来创建,3个参数分别为: >字体的名...

精选30道Java笔试题解答

转:精选30道Java笔试题解答 都是一些非常非常基础的题,是我最近参加各大IT公司笔试后靠记忆记下来的,经过整理献给与我一样参加各大IT校园招聘的同学们,纯考Java基础功底, 老手们就不用进来了,免得笑话我们这些未出校门的孩纸们,但是IT公司就喜欢考这些基础的东西,所以为了能进大公司就~~~当复习期末考吧。花了不少时间整理,在整理过程中也学到了很多东西...

java笔试练习题

选择题(共50题,每题1.5分,共75分。多选题选不全或选错都不得分。)1. 以下属于面向对象的特征的是(C,D)。(两项)A) 重载B) 重写C) 封装D) 继承2. 以下代码运行输出是(C)public class Person{private String name=”Person”;int age=0;}public class Child ext...