代码之家  ›  专栏  ›  技术社区  ›  Roman Tymchyshyn

在C++多重继承中,如何选择将继承哪个基类方法?[副本]

  •  0
  • Roman Tymchyshyn  · 技术社区  · 10 年前

    考虑以下简单示例:

    #include <iostream>
    using namespace std;
    
    class A {
    public:
        virtual void foo() {
            cout<<"A"<<endl;
        }
    };
    
    class B: public virtual A {
    public:
        virtual void foo(){
            cout<<"B"<<endl;
        }
    };
    
    class C : public virtual A {
    public:
        virtual void foo(){
            cout<<"C"<<endl;
        }
    };
    
    class D : public B, public C {
        public:
            void print(){
                foo();
            }
    };
    
    int main () {
        D d;
        d.print();
        return 0;
    }
    

    这段代码不起作用,因为对foo的调用是模糊的。但问题是:

    我如何定义应该从哪些方法继承哪些类?如果我有这样的机会呢?

    1 回复  |  直到 10 年前
        1
  •  1
  •   Propolys    10 年前

    消除对函数的调用的歧义。以以下示例为例:

    class A { virtual void foo(); };
    class B { virtual void foo(); };
    class C : public A ,public B { void foo(); };
    

    要从A、B甚至从子类调用foo:C do

    C *obj = new C;
    obj->foo();
    obj->A::foo();
    obj->B::foo();
    

    来源/灵感: http://www.cprogramming.com/tutorial/multiple_inheritance.html