②编写程序:声明一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有各自不同(输出的显示内容不同)的Run、Stop等成员函数。在main()函数中声明vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数,观察其执行情况。再分别用vehicle类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop声明为虚函数,再试试看。
时间: 2024-03-14 16:47:14 浏览: 20
以下是一个基于C++的实现,实现了车(vehicle)基类,以及自行车(bicycle)类、汽车(motorcar)类、摩托车(motorcycle)类的继承和成员函数的覆盖,同时还演示了使用虚函数的情况:
```c++
#include <iostream>
using namespace std;
class vehicle {
public:
virtual void Run() {
cout << "vehicle is running." << endl;
}
virtual void Stop() {
cout << "vehicle is stopped." << endl;
}
};
class bicycle : public vehicle {
public:
virtual void Run() {
cout << "bicycle is running." << endl;
}
virtual void Stop() {
cout << "bicycle is stopped." << endl;
}
};
class motorcar : public vehicle {
public:
virtual void Run() {
cout << "motorcar is running." << endl;
}
virtual void Stop() {
cout << "motorcar is stopped." << endl;
}
};
class motorcycle : public bicycle, public motorcar {
public:
virtual void Run() {
cout << "motorcycle is running." << endl;
}
virtual void Stop() {
cout << "motorcycle is stopped." << endl;
}
};
int main() {
vehicle v;
bicycle b;
motorcar m;
motorcycle mc;
v.Run();
v.Stop();
b.Run();
b.Stop();
m.Run();
m.Stop();
mc.Run();
mc.Stop();
vehicle* p;
p = &v;
p->Run();
p->Stop();
p = &b;
p->Run();
p->Stop();
p = &m;
p->Run();
p->Stop();
p = &mc;
p->Run();
p->Stop();
return 0;
}
```
在上述代码中,我们定义了车(vehicle)基类和其子类自行车(bicycle)类、汽车(motorcar)类、摩托车(motorcycle)类。在main()函数中声明了这些对象,并调用它们的Run()和Stop()函数。然后我们定义了一个vehicle类型的指针p,并分别将其指向不同的对象,调用对象的成员函数。最后我们将Run()和Stop()函数声明为虚函数,再次运行程序,观察输出结果。