zoukankan      html  css  js  c++  java
  • C++继承中关于子类构造函数的写法

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

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

    构造原则如下:

        1. 如果子类没有定义构造方法,则调用父类的无参数的构造方法。

        2. 如果子类定义了构造方法,不论是无参数还是带参数,在创建子类的对象的时候,首先执行父类无参数的构造方法,然后执行自己的构造方法。

        3. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数,则会调用父类的默认无参构造函数。

        4. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数且父类自己提供了无参构造函数,则会调用父类自己的无参构造函数。

        5. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数且父类只定义了自己的有参构造函数,则会出错(如果父类只有有参数的构造方法,则子类必须显示调用此带参构造方法)。

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

     #include <iostream.h>
     2 
     3   class animal
     4   {
     5   public:
     6     animal(int height, int weight)
     7     {
     8       cout<<"animal construct"<<endl;
     9     }
    10     …
    11   };
    12 
    13   class fish:public animal
    14   {
    15   public:
    16     fish():animal(400,300)
    17     {
    18       cout<<"fish construct"<<endl;
    19     }
    20     …
    21   };
    22   void main()
    23   {
    24     fish fh;
    25   }
  • 相关阅读:
    tomcat bug之部署应用的时候经常会发上startup failed due to previous errors
    maven编译项目理解
    MyReport报表引擎2.6.5.0新功能
    PHP入门-摘要表格处理问题
    EnumMap源代码阅读器
    MySQL几种方法的数据库备份
    工作日志2014-08-19
    Linux通过网卡驱动程序和版本号的信息
    JS于,子类调用父类的函数
    hdu 5007 水 弦
  • 原文地址:https://www.cnblogs.com/rednodel/p/9303219.html
Copyright © 2011-2022 走看看