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

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

    大部分转载 小部分自写
  • 相关阅读:
    iframe高度100%,自适应高度
    怎么让frameset出现整体滚动条
    页面返回顶部
    HTML页面跳转的5种方法
    java web中路径问题。
    sql server数据库添加记录
    如何获取新浪微博背景图
    JavaScript检查是否包含某个字符
    纯JS省市区三级联动
    document.getElementById方法在火狐和谷歌浏览器兼容
  • 原文地址:https://www.cnblogs.com/8586/p/1978445.html
Copyright © 2011-2022 走看看