C++ 求大神指教!

定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。自行车类有高度(height)等属性,汽车类有座位数(SeatNum)等属性。从bicycle和motorcar派生出摩托车(motorcycle)类,在继承过程中,注意把vehicle设置为虚基类。如果不把vehicle设置为虚基类,会有什么问题?编程试试看。

第1个回答  推荐于2016-09-13
因为bicycle和motorcar都继承vehicle,这样派生的motorcycle就会继承2次vehicle,
不声明为virtual public vehicle,就会有问题。
具体的内存是基类的内存布局,会有2份基类的成员哦。追问

有代码么

追答

你再追问,我再补充,要不贴不下
#include
#include
#include
#include
#include
using namespace std;
#include
class vehicle
{
public:
vehicle(){}
vehicle(double ms, double w): maxSpeed(ms), weight(w)
{}
virtual ~vehicle(){}
virtual void run()=0;
virtual void stop()=0;
virtual void display(){cout<< "最大时速: " << maxSpeed << "自重: " << weight << endl;}
private:
double maxSpeed;
double weight;
};

追问

补充

追答

后面还有
class bicycle: virtual public vehicle
{
public:
bicycle(): vehicle(20, 20){}
bicycle(double ms, double w): vehicle(ms, w){}
void run(){cout << "自行车骑" << endl;}
void stop() {cout << "自行车刹车" << endl;}
};
class motorcar: virtual public vehicle
{
public:
motorcar(): vehicle(200, 1000){}
motorcar(double ms, double w): vehicle(ms, w){}
void run(){cout << "汽车开" << endl;}
void stop() {cout << "汽车刹车" << endl;}
};

追问

大神棒棒哒~

追答

class motorcycle: virtual public bicycle, motorcar
{
public:
motorcycle(): vehicle(200, 500){}
motorcycle(double ms, double w): vehicle(ms, w){}
void run(){cout display();
v2->display();
v3->display();
v1->run();
v2->run();
v2->stop();
v3->run();
return 0;
}

本回答被提问者采纳
第2个回答  2014-11-21
虚函数的功能是干嘛的?就是为了实现多态啊,虚函数联系到多态,多态联系到继承。因为你的要求中有很多的对象,什么自行车啊,小汽车啊,这些都是对象,对象不同追问

有代码么

相似回答