zoukankan      html  css  js  c++  java
  • 子类中调用父类的带参数的构造函数|子类构造函数调用父类构造函数 的说明

    下面我们修改一下animal类的构造函数,增加两个参数height和weight,分别表示动物的高度和重量。代码如例2-13所示。
        例2-13 
        #include <iostream.h> 
        class animal 
        { 
        public: 
             animal(int height, int weight) 
             { 
                 cout<<"animal construct"<<endl; 
             } 
             ~animal() 
             { 
                 cout<<"animal destruct"<<endl; 
             } 
             void eat() 
             { 
                 cout<<"animal eat"<<endl; 
             } 
             void sleep() 
             { 
                 cout<<"animal sleep"<<endl; 
             } 
             void breathe() 
             { 
                 cout<<"animal breathe"<<endl; 
             } 
        }; 
        class fish:public animal 
        { 
        public: 
             fish() 
             { 
                 cout<<"fish construct"<<endl; 
             } 
             ~fish() 
             { 
                 cout<<"fish destruct"<<endl; 
             } 
        }; 
        void main() 
        { 
             fish fh; 
        }

        当我们编译这个程序时,就会出现如下错误:

        那么这个错误是如何出现的呢?当我们构造fish类的对象fh时,它需要先构造animal类的对象,调用animal类的默认构造函数(即不带参数的构造函数),而在我们的程序中,animal类只有一个带参数的构造函数,在编译时,因找不到animal类的默认构造函数而出错。

     因此,在构造fish类的对象时(调用fish类的构造函数时),要想办法去调用animal类的带参数的构造函数,那么,我们如何在子类中向父类的构造函数传递参数呢?可以采用如例2-14所示的方式,在构造子类时,显式地去调用父类的带参数的构造函数。

        例2-14 
        #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; 
        }

        注意程序中以粗体显示的代码。在fish类的构造函数后,加一个冒号(:),然后加上父类的带参数的构造函数。这样,在子类的构造函数被调用时,系统就会去调用父类的带参数的构造函数去构造对象。这种初始化方式,还常用来对类中的常量(const)成员进行初始化,如下面的代码所示:
        class point 
        { 
        public: 
             point():x(0),y(0) 
        private: 
             const int x; 
             const int y; 
        };

        当然,类中普通的成员变量也可以采取此种方式进行初始化,然而,这就没有必要了。

    大部分转载 小部分自写
  • 相关阅读:
    超过5名学生的课
    大的国家
    shell启动时读取的配置文件
    shell中的环境变量
    chisel中pviews命令无法使用
    shell script中的$*和$@
    OS X EI Capitan 10.11.4中sudo无法起作用的解决方法
    如何判断CPU的位数
    block中无法使用C数组变量
    布尔代数
  • 原文地址:https://www.cnblogs.com/8586/p/1978445.html
Copyright © 2011-2022 走看看