首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 计算机考试 > 等级考试 > 复习指导 >

在子类中调用父类的带参数的构造函数

2009-01-09 
构造函数

    下面我们修改一下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;
  };
  当然,类中普通的成员变量也可以采取此种方式进行初始化,然而,这就没有必要了。

 

3COME考试频道为您精心整理,希望对您有所帮助,更多信息在http://www.reader8.com/exam/

热点排行