| 网站首页 | 文章中心 | 电子书下载 | 矢量图库 | 视频教程 | 素材下载 | 程序代码下载 | JS代码 | 论坛 | 
常用软件类:
|杀毒安全 |联络聊天 |网络软件 |多媒体类 |系统工具 |图形图像 |系统工具 |应用软件 |行业软件
开发设计类:
|动画制作 |图像处理 |3D设计 |操作系统 |站长学院 |网络相关 |WEB设计 |数据库类 |程序开发
c++类的多重继承与虚拟继承
作者:佚名    文章来源:网络    点击数:    更新时间:2006-9-12
 
以上面的代码为例,我们要想让AmphibianCar类既获得一个Vehicle的拷贝,而且又同时共享用Car类与Boat类的数据成员与成员函数就必须通过C++所提供的虚拟继承技术来实现。 
   我们在Car类和Boat类继承Vehicle类出,在前面加上virtual关键字就可以实现虚拟继承,使用虚拟继承后,当系统碰到多重继承的时候就会自动先加入一个Vehicle的拷贝,当再次请求一个Vehicle的拷贝的时候就会被忽略,保证继承类成员函数的唯一性。 

   修改后的代码如下,注意观察变化: 

//程序作者:管宁 
//站点:www.cndev-lab.com 
//所有稿件均有版权,如要转载,请务必著名出处和作者 

#include <iostream>
usingnamespacestd; 

classVehicle 

public: 
Vehicle(intweight =0) 

Vehicle::weight =weight; 
cout<<"载入Vehicle类构造函数"<} 
voidSetWeight(intweight) 

cout<<"重新设置重量"<Vehicle::weight =weight; 

virtualvoidShowMe() =0; 
protected: 
intweight; 
}; 
classCar:virtualpublicVehicle//汽车,这里是虚拟继承 

public: 
Car(intweight=0,intaird=0):Vehicle(weight) 

Car::aird =aird; 
cout<<"载入Car类构造函数"<} 
voidShowMe() 

cout<<"我是汽车!"<} 
protected: 
intaird; 
}; 

classBoat:virtualpublicVehicle//船,这里是虚拟继承 

public: 
Boat(intweight=0,floattonnage=0):Vehicle(weight) 

Boat::tonnage =tonnage; 
cout<<"载入Boat类构造函数"<} 
voidShowMe() 

cout<<"我是船!"<} 
protected: 
floattonnage; 
}; 

classAmphibianCar:publicCar,publicBoat//水陆两用汽车,多重继承的体现 

public: 
AmphibianCar(intweight,intaird,floattonnage) 
:Vehicle(weight),Car(weight,aird),Boat(weight,tonnage) 
//多重继承要注意调用基类构造函数 

cout<<"载入AmphibianCar类构造函数"<} 
voidShowMe() 

cout<<"我是水陆两用汽车!"<} 
voidShowMembers() 

cout<<"重量:"<} 
}; 
intmain() 

AmphibianCar a(4,200,1.35f); 
a.ShowMe(); 
a.ShowMembers(); 
a.SetWeight(3); 
a.ShowMembers(); 
system("pause"); 




注意观察类构造函数的构造顺序。 

虽然说虚拟继承与虚函数有一定相似的地方,但读者务必要记住,他们之间是绝对没有任何联系的! 

上一页  [1] [2] 


相关文章