当前位置:主页   - 电脑 - 程序设计 - C/C++
C++类的多重继承与虚拟继承
来源:网络   作者:   更新时间:2012-02-15
收藏此页】    【字号    】    【打印】    【关闭

  在过去的学习中,我们始终接触的单个类的继承,但是在现实生活中,一些新事物往往会拥有两个或者两个以上事物的属性,为了解决这个问题,C++引入了多重继承的概念,C++允许为一个派生类指定多个基类,这样的继承结构被称做多重继承。

  举个例子,交通工具类可以派生出汽车和船连个子类,但拥有汽车和船共同特性水陆两用汽车就必须继承来自汽车类与船类的共同属性。

  由此我们不难想出如下的图例与代码:

  

  当一个派生类要使用多重继承的时候,必须在派生类名和冒号之后列出所有基类的类名,并用逗好分隔。

//程序作者:管宁  
//站点:www.cndev-lab.com  
//所有稿件均有版权,如要转载,请务必著名出处和作者  
 
#include<iostream> 
usingnamespacestd; 
 
classVehicle 
{ 
   public: 
     Vehicle(intweight=0) 
     { 
       Vehicle::weight=weight; 
     } 
     voidSetWeight(intweight) 
     { 
       cout<<"重新设置重量"<<endl; 
       Vehicle::weight=weight; 
     } 
     virtualvoidShowMe()=0; 
   protected: 
     intweight; 
}; 
classCar:publicVehicle//汽车 
{ 
   public: 
     Car(intweight=0,intaird=0):Vehicle(weight) 
     { 
       Car::aird=aird; 
     } 
     voidShowMe() 
     { 
       cout<<"我是汽车!"<<endl; 
     } 
   protected: 
     intaird; 
}; 
 
classBoat:publicVehicle//船 
{ 
   public: 
     Boat(intweight=0,floattonnage=0):Vehicle(weight) 
     { 
       Boat::tonnage=tonnage; 
     } 
     voidShowMe() 
     { 
       cout<<"我是船!"<<endl; 
     } 
   protected: 
     floattonnage; 
}; 
 
classAmphibianCar:publicCar,publicBoat//水陆两用汽车,多重继承的体现 
{ 
   public: 
     AmphibianCar(intweight,intaird,floattonnage) 
     :Vehicle(weight),Car(weight,aird),Boat(weight,tonnage) 
     //多重继承要注意调用基类构造函数 
     { 
     
     } 
     voidShowMe() 
     { 
       cout<<"我是水陆两用汽车!"<<endl; 
     } 
}; 
intmain() 
{ 
   AmphibianCara(4,200,1.35f);//错误 
   a.SetWeight(3);//错误 
   system("pause"); 
}

  上面的代码从表面看,看不出有明显的语发错误,但是它是不能够通过编译的。这有是为什么呢?

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明