WEB开发网
开发学院软件开发VC VC++深入详解:类的继承 阅读

VC++深入详解:类的继承

 2008-11-24 19:39:09 来源:WEB开发网   
核心提示: 重写animal和fish类,让fish从animal继承,VC++深入详解:类的继承(2),代码如例2-11所示(EX05.CPP),例2-11#include <iostream.h>class animal{public: void eat() {cout<<

重写animal和fish类,让fish从animal继承,代码如例2-11所示(EX05.CPP)。

例2-11

  #include <iostream.h>
  class animal
  {
  public:
     void eat()
     {
       cout<<"animal eat"<<endl;
     }
void sleep()
     {
       cout<<"animal sleep"<<endl;
     }
     void breathe()
     {
       cout<<"animal breathe"<<endl;
     }
  };
  class fish:public animal
  { 
  };
  void main()
  {
     animal an;
     fish fh;
     an.eat();
     fh.eat();
  }

虽然fish类没有显式地编写一个方法,但fish从animal已经继承eat、sleep、breathe方法,我们通过编译运行可以看到结果。

下面,我们在animal类和fish类中分别添加构造函数和析构函数,然后在main函数中定义一个fish类的对象fh,看看在构造fish类的对象时,animal类的构造函数是否被调用;如果调用,animal类和fish类的构造函数的调用顺序是怎样的。完整代码如例2-12所示(EX06.CPP)。

例2-12

  #include <iostream.h>
  class animal
  {
  public:
     animal()
     {
       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;
  }

编译运行,出现如图2.11所示的结果。

可以看到当构造fish类的对象fh时,animal类的构造函数也要被调用,而且在fish类的构造函数调用之前被调用。当然,这也很好理解,没有父亲就没有孩子,因为fish类从animal类继承而来,所以在fish类的对象构造之前,animal类的对象要先构造。在析构时,正好相反。

VC++深入详解:类的继承

图2.11 EX06.CPP程序的运行结果

上一页  1 2 

Tags:VC 深入 详解

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接