#include
using namespace std;
class CAR
{
protected:
double speed;
public:
CAR(double s):speed(s){ }
~CAR(){}
void Show()
{
cout<<"创建汽车("<"公里/小时)"<"汽车:"<"公里/小时)"<"销毁汽车("<"公里/小时)"<class BUS: virtual public CAR
{
protected:
double seat;
public:
BUS(double s,double seat):CAR(s),seat(seat){}
~BUS(){ }
void show()
{
cout<<"创建汽车("<"公里/小时)"<"创建客车("<"人)"<"客车:"<"公里/小时), "<"人"<"销毁客车("<"人)"<"销毁汽车("<"公里/小时)"<class TRUCK:virtual public CAR
{
protected:
double load;
public:
TRUCK(double s,double load):CAR(s),load(load){}
~TRUCK(){}
void show()
{
cout<<"创建汽车("<"公里/小时)"<"创建货车("<"吨)"<"货车:"<"公里/小时), "<"吨"<"销毁货车("<"吨"<"销毁汽车("<"公里/小时)"<class VAN:public BUS,public TRUCK
{
public:
VAN(double s,double seat,double load):CAR(s),BUS(s,seat),TRUCK(s,load){} //虚基类
~VAN(){}
void show()
{
cout<<"创建汽车("<"公里/小时)"<"创建客车("<"人)"<"创建货车("<"吨)"<"货车:"<"公里/小时), "<"人, "<"吨"<"摧毁客货两用车"<"销毁货车("<"吨"<"销毁客车("<"人)"<"销毁汽车("<"公里/小时)"<int main()
{
CAR *p;
double s, t, w;
cin >>s>>t>>w;
p = new VAN(s, t, w);
p->Show();
delete p;
return 0;
*主函数是不可改变的
为什么只能输出基类CRA的show函数内容 我希望的把VAN的show函数输出
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
在这段代码中,由于 VAN
类继承了 BUS
和 TRUCK
类,而 BUS
和 TRUCK
类都重写了 CAR
类中的 show()
函数,因此在 VAN
类中也需要重新定义 show()
函数,以便输出 VAN
类自己的信息。同时,由于 BUS
和 TRUCK
类都是虚继承自 CAR
类的,所以在 VAN
类的构造函数中需要显式调用 CAR
类的构造函数,以确保只创建一个 CAR
对象。
修改后的 VAN
类定义如下:
class VAN : public BUS, public TRUCK {
public:
VAN(double s, double seat, double load) : CAR(s), BUS(s, seat), TRUCK(s, load), speed(s), seat(seat), load(load) {}
~VAN() {}
void show() {
cout << "创建汽车(" << speed << "公里/小时)" << endl;
cout << "创建客车(" << seat << "人)" << endl;
cout << "创建货车(" << load << "吨)" << endl;
cout << "客货两用车:" << speed << "公里/小时, " << seat << "人, " << load << "吨" << endl;
cout << "销毁货车(" << load << "吨)" << endl;
cout << "销毁客车(" << seat << "人)" << endl;
cout << "销毁汽车(" << speed << "公里/小时)" << endl;
}
private:
double speed;
double seat;
double load;
};
在 main()
函数中,由于 p
是 CAR
类型的指针,因此只能调用 CAR
类的 show()
函数。为了调用 VAN
类的 show()
函数,需要将 p
的类型改为 VAN
类型的指针。修改后的 main()
函数如下:
int main() {
VAN* p;
double s, t, w;
cin >> s >> t >> w;
p = new VAN(s, t, w);
p->show();
delete p;
return 0;
}
这样修改后,程序就可以输出 VAN
类的信息了。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
不知道你这个问题是否已经解决, 如果还没有解决的话: