多重继承钻石
Multiple inheritance diamond
这是代码:
class Vehicle {
public :
Vehicle () {
cout << " Vehicle Constructor " << endl ;
}
virtual ~ Vehicle () {
cout << " Vehicle Destructor " << endl ;
}
virtual void accelerate () {
cout << " Vehicle Accelerating " << endl ;
}
void setAcceleration ( double a ) {
acceleration = a;
}
double getAcceleration () {
return acceleration ;
}
protected :
double acceleration ;
};
class Car : public Vehicle {
public :
Car () {
cout << " Car Constructor " << endl ;
}
virtual ~ Car () {
cout << " Car Destructor " << endl ;
}
virtual void accelerate () {
cout << " Car Accelerating " << endl ;
}
virtual void drive () {
cout << " Car Driving " << endl ;
}
};
class Jet : public Vehicle {
public :
Jet () {
cout << " Jet Constructor " << endl ;
}
virtual ~ Jet () {
cout << " Jet Destructor " << endl ;
}
virtual void fly () const {
cout << " Jet flying " << endl ;
}
};
class JetCar : public Car , public Jet {
public :
JetCar () {
cout << " JetCar Constructor " << endl ;
}
virtual ~ JetCar () {
cout << " JetCar Destructor " << endl ;
}
virtual void drive () {
cout << " JetCar driving " << endl ;
}
virtual void fly () {
cout << " JetCar flying " << endl ;
}
};
void analyzeCarPerformance ( Car * testVehicle ) {
testVehicle -> drive () ;
}
void analyzeJetPerformance ( Jet * testVehicle ) {
testVehicle -> fly () ;
}
int main () {
Car myCar ;
Jet myJet ;
JetCar myJetCar ;
cout << endl << endl ;
cout << " Car testing in progress " << endl ;
analyzeCarPerformance (& myCar );
analyzeCarPerformance (& myJetCar ) ;
cout << " Jet testing in progress " << endl ;
analyzeJetPerformance (& myJet );
analyzeJetPerformance (& myJetCar ) ;
cout << endl << endl ;
return 0;
}
总的来说,当我调用函数analyzeJetPerformance (& myJetCar )
编译器给我Jat flying
没有JetCar flying
我所期望的。这里有什么问题?
在 Jet 中,您有以下内容:
virtual void fly () const {
cout << " Jet flying " << endl ;
}
在捷车中,您有:
virtual void fly () {
cout << " JetCar flying " << endl ;
}
这些不是相同的功能。使函数声明相同,它应该可以工作。
相关文章:
- 关于C++中具有多重继承"this"指针的说明
- C++中模板化异常类的多重继承
- 虚拟继承中是否存在多重继承?
- 如何在 c++ 多重继承中调用父非虚函数?
- 多重继承相同的方法名,没有歧义
- 使用enable_if解决多重继承歧义
- 多重继承导致虚假的模糊虚拟函数过载
- 多重继承和访问不明确的元素
- C++ 多重继承:使用基类 A 的实现实现基类 B 的抽象方法
- 多重继承中的派生类的行为类似于聚合
- 为什么我的 Hippomock 期望在使用多重继承时失败
- 带有此指针的模板类多重继承构造函数不起作用?
- 使用多重继承时出现编译错误
- 增强多重继承的序列化
- 多重继承:跳过'virtual'关键字并拒绝菱形层次结构的使用?
- 仅函数的多重继承 - 没有虚拟和 CRTP
- C++多重继承和鸭子类型
- 虚拟继承如何解决 c++ 中的多重继承(钻石)?它将走哪条路
- qt qsharedDatapointer多重继承钻石图案
- 多重继承钻石