linzx1684 2015-11-08 11:00 采纳率: 50%
浏览 2285
已采纳

C++自己写的虚基类和同名函数多重继承的小例子出现了继承不明确的问题

#include

using namespace std;

class vihicle
{
public:
int i;
virtual void run()
{
cout<<"111";
}
};
class bicycle:virtual public vihicle
{
public:
void run()
{
cout<<"bicycle run";
}

};

class motorcar:virtual public vihicle
{
public:
void run()
{
cout<<"motorcar run";
}

};

class mb:public bicycle
{
public:
virtual void run1(){}
void run()
{
run1();
}
};

class mm:public motorcar
{
public:
virtual void run2(){}
void run()
{
run2();
}
};
class motorbicycle:public mb,public mm
{
public:
void run1()
{
cout<<"8888";
}
void run2()
{
cout<<"7777";
}
};

int main()
{
motorbicycle d1;
bicycle a1;
vihicle *b2=&a1;
vihicle *b3=&d1;
bicycle *pB1=&d1;
motorcar *pB2=&d1;
b3->run();
b2->run();
pB1->run();
pB2->run();
cout<<d1.i;

while (1)
{
}
return 0;

}图片说明

  • 写回答

4条回答 默认 最新

  • 普通网友 2015-11-08 13:55
    关注

    #if 1
    #include
    using namespace std;

    class vihicle
    {
    public:
    int i;
    virtual void run()
    {
    cout<<"111";
    }
    };
    class bicycle:virtual public vihicle
    {
    public:
    void run()
    {
    cout<<"bicycle run";
    }
    };
    class motorcar:virtual public vihicle
    {
    public:
    void run()
    {
    cout<<"motorcar run";
    }
    };
    class mb:public bicycle
    {
    public:
    virtual void run1(){}
    void run()
    {
    run1();
    }
    };
    class mm: public motorcar
    {
    public:
    virtual void run2(){}
    void run()
    {
    run2();
    }
    };
    class motorbicycle: public mb, public mm
    {
    public:
    //void run(){}
    void run1()
    {
    cout<<"8888";
    }
    void run2()
    {
    cout<<"7777";
    }
    };
    int main()
    {
    motorbicycle d1;
    bicycle a1;
    vihicle *b2=&a1;
    vihicle *b3=&d1;
    bicycle *pB1=&d1;
    motorcar *pB2=&d1;
    b3->run();
    b2->run();
    pB1->run();
    pB2->run();
    cout<<d1.i;
    }
    #endif

    注意我双斜杠注释的那一行,语法是没有错,但是代码逻辑是错的,你想要同时继承两个类,没有问题,但是编译器并不知道你想要继承哪一个run()
    方法。因为你的 bicycle类和你的motorcar类已经将父类的run()方法给覆盖掉了,那就是说你的 motorbicycle类必须得覆盖以上两个类中的run()方法
    否则,编译器怎么能够知道,该继承哪个呢? 当然,以上注释是一种解决方案,还有一种就是,在你的 bicycle类和你的motorcar类中不要定义run()
    方法,这样的话就可以过去了,当然,请根据你当下的需求来,还有就是你好像不理解虚拟继承的本质,好好补补基础...

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集