#include<iostream> using namespace std; class vehicle { private: int MaxSpeed; int Weight; public: virtual void Run() { cout<<"Run"<<endl; } virtual void Stop() { cout<<"Stop"<<endl; } }; class bicyle:public vehicle { private: int Height; }; class motorcar:public vehicle { private: int SeatNum; }; class motocycle:public bicyle,public motorcar { }; int main(){ motocycle a; a.Run(); a.Stop(); return 0; }有什么问题怎么改
时间: 2024-03-23 09:43:54 浏览: 25
在这段代码中,motocycle类同时继承了bicyle和motorcar类,这样会导致多重继承问题。因为在调用a.Run()和a.Stop()方法时,编译器无法确定应该调用哪个父类的方法。为了解决这个问题,可以使用虚拟继承。
修改代码如下:
```
#include<iostream>
using namespace std;
class vehicle {
private:
int MaxSpeed;
int Weight;
public:
virtual void Run()
{
cout<<"Run"<<endl;
}
virtual void Stop()
{
cout<<"Stop"<<endl;
}
};
class bicyle: virtual public vehicle {
private:
int Height;
};
class motorcar: virtual public vehicle {
private:
int SeatNum;
};
class motocycle:public bicyle,public motorcar {
};
int main(){
motocycle a;
a.Run();
a.Stop();
return 0;
}
```
在bicyle和motorcar类的继承声明中加上virtual关键字,将它们变为虚拟继承,这样motocycle类中就只有一份vehicle类的实例,避免了多重继承问题,同时也保留了bicyle和motorcar类的特性。