C++ 多个基类可以有相同的虚方法吗? 类A有一个纯虚方法read() 类B有一个实现的虚拟方法read() 我有一个C类继承了a和B 这会发生吗

C++ 多个基类可以有相同的虚方法吗? 类A有一个纯虚方法read() 类B有一个实现的虚拟方法read() 我有一个C类继承了a和B 这会发生吗,c++,inheritance,virtual-functions,C++,Inheritance,Virtual Functions,我试图实现的是两个基类A和B相互补充 所以Cread()方法实际上会调用类Bread() A类{ 虚拟int get_data()=0; 作废打印(){ 日志(获取数据()); } } B类{ 虚拟整数获取_数据(){ 返回4; } } C类:公共A、公共B{ } 我不在我的电脑上,在接下来的几周内也没有机会,所以我不能测试这个。。。但我正在设计架构,需要知道这是否可行,如果不可行。。这是怎么做到的 多个基类可以有相同的虚方法吗 这会发生吗 对 所以C read()方法实际上会调用类B rea

我试图实现的是两个基类A和B相互补充

所以C
read()
方法实际上会调用类B
read()

A类{
虚拟int get_data()=0;
作废打印(){
日志(获取数据());
}
}
B类{
虚拟整数获取_数据(){
返回4;
}
}
C类:公共A、公共B{
}
我不在我的电脑上,在接下来的几周内也没有机会,所以我不能测试这个。。。但我正在设计架构,需要知道这是否可行,如果不可行。。这是怎么做到的

多个基类可以有相同的虚方法吗

  • 这会发生吗
  • 所以C read()方法实际上会调用类B read()

    这不是自动发生的。base的成员函数不会重写不相关base的函数

    您可以将覆盖添加到
    C

    class C : public A, public B {
        int get_data() override;
    }
    
    这将覆盖
    A::get_data
    B::get_data
    。为了“实际调用类B read()”,您确实可以进行这样的调用:

    int C::get_data() {
        return B::get_data();
    }
    
    或者。。。如果您没有声明
    B::get_data
    private,这是可能的


    如果稍微更改层次结构,则可以在另一个基中重写函数而不显式地在派生中委托。特别是,您需要一个公共基础和虚拟继承:

    struct Base {
        virtual int get_data() = 0;
    };
    
    struct A : virtual Base {
        void print() {
            std::cout << get_data();
        }
    };
    
    struct B : virtual Base {
        int get_data() override {
            return 4;
        }
    };
    
    struct C : A, B {};
    
    struct Base{
    虚拟int get_data()=0;
    };
    结构A:虚拟基{
    作废打印(){
    
    std::无法回答您的问题,但有许多在线编译器可用于检查以下内容:(我并不是说您问错了,只是提一下)你发布的在线编译器中没有编译它。如果不允许这样做,我怎么能这样做?@xDGameStudios当某些东西没有编译时,你应该阅读错误消息。@eerorika我读了错误消息!谢谢,我不知道同一个基的两个类可以聚合成第三个类!
    struct Base {
        virtual int get_data() = 0;
    };
    
    struct A : virtual Base {
        void print() {
            std::cout << get_data();
        }
    };
    
    struct B : virtual Base {
        int get_data() override {
            return 4;
        }
    };
    
    struct C : A, B {};