*虚基类虚基类的引入用于有共同基类的场合声明以virtual修饰说明基类例:classB1:,而不重复产生多次拷贝注意:在第一级继承时就要将共同基类设计为虚基类。C++,在派生类的对象中,同名数据成员在内存中同时拥有多个拷贝,同一个成员函数会有多个映射,出现二义性,这种二义性为间接二义性。【例8-6】多重继承的间接二义性。假定类Car、Wagon从共同的基类Automobile(汽车)派生出来,程序如下:1234567891011121314151617181920/*****************************多继承的二义性***************************/#include<iostream>usingnamespacestd;classAutomobile//汽车类{private:intpower;//动力public:Automobile(intpower){this->power=power;}voidshow(){cout<<"power:"<<power;}};C++:publicAutomobile//小客车类{private:intseat;//座位public:Car(intpower,intseat):Automobile(power){this->seat=seat;}voidshow(){cout<<"car:";Automobile::show();cout<<"seat:"<<seat<<endl;}};classWagon:publicAutomobile//小货车类{private:intload;//装载量public:Wagon(intpower,intload):Automobile(power){this->load=load;}voidshow(){cout<<"wagon:";Automobile::show();cout<<"load:"<<load<<endl;}};C++:ar,publicWagon//客货两用车类{public:StationWagon(intCPower,intWPower,intseat,intload) :Wagon(WPower,load),Car(CPower,seat) { } voidshow(){cout<<"StationWagon:"<<endl;Car::show();Wagon::show();}};intmain(){StationWagonSW(105,108,3,8);();return0;}运行结果:StationWagon:carpower:105seat:3wagonpower:108load:8一个StationWagon类对象中,具有多个从不同途径继承来的同名的数据成员power。一方面占据了内存空间,另一方面由于在内存中有不同的拷贝而可能造成数据不一致。将car::power设成105,Wagon::power设成108,那么StationWagon的power值究竟应为多少?C++,将共同基类设置为虚基类。这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数名也只有一个映射。这样不仅就解决了二义性问题,也节省了内存,避免了数据不一致的问题。虚基类的定义是在融合在派生类的定义过程中的,其定义格式如下:class派生类名:virtual继承方式基类名其中:virtual是关键字,声明该基类为派生类的虚基类。在多继承情况下,虚基类关键字的作用范围和继承方式关键字相同,只对紧跟其后的基类起作用。声明了虚基类之后,虚基类在进一步派生过程中始终和派生类一起,维护同一个基类子对象的拷贝。C++,:classCar:virtualpublicAutomobile//小客车类classWagon:v
C++课件汇总xujilei 来自淘豆网m.daumloan.com转载请标明出处.