使用多重继承调用C ++中的重写函数

时间:2015-09-30 18:33:54

标签: c++ inheritance multiple-inheritance virtual-inheritance

我遇到了多继承用例的问题(这不是我的项目,我没有决定继承方案,抱歉)。无论如何,我似乎无法从覆盖函数调用受保护的virtual成员函数。这是一个简化的类结构:

class Base {
    protected:
        virtual void foo() { }
};

class A: virtual public Base {
    protected:
        virtual void foo();
};
void A::foo() { printf("Hello A\n"); }

class B: virtual public Base {
    protected:
        virtual void foo();
};
void B::foo() { printf("Hello B\n"); }

class AB: public A, public B {
    protected:
        void foo();
};
void AB::foo()
{
    A::foo();
    B::foo();
}

我希望如果我拨打AB的{​​{1}},我会得到类似

的输出
foo()

然而,当我编译时,我得到一个错误,如:

Hello A
Hello B

即使我将所有error #308: function "A::foo" is inaccessible A::foo(); ^ error: a nonstatic member reference must be relative to a specific object A::foo(); ^ error #308: function "B::foo" is inaccessible B::foo(); ^ error: a nonstatic member reference must be relative to a specific object B::foo(); ^ 公开,我仍然会看到这一点。怎么了?

2 个答案:

答案 0 :(得分:0)

特定对象可以是*this,因此this->A::foo()this->B::foo()

答案 1 :(得分:0)

我没有在正确的命名空间中定义我的函数。 void foo()void AB::foo()非常不同!