2

假设我有 2 个课程:

struct a
{
    void test();
};

struct b
{
    void test();
};

现在让我们从这些类继承:

class c : public a, public b
{
};

调用c::test()会产生错误,因为class aclass b具有相同的功能void test(),现在我的问题:

是否可以继承那些(非虚拟!)函数,并且何时c::test()调用两者都被执行?

4

2 回答 2

4

为此,您需要实现void test()inc并调用这两个方法。没有自动的方法可以做到这一点。

class c : public a, public b
{
public:
    void test() {
        a::test();
        b::test();
    }
}

但是,我强烈建议您不要在派生类中重新实现非虚函数。问题是下面会悄悄地调用不同的函数,即使它们在同一个对象上操作:

   c* p1 = new c();
   a* p2 = p1;
   p1->test();
   p2->test();
于 2012-12-01T20:03:51.560 回答
0

你的前提是错误的;继承自a并且b不是错误。尝试调用c::test()是一个错误,因为它的分辨率不明确。但是,您可以随意覆盖test()in c,例如通过显式调用this->a::test();and this->b::test();in void c::test();

于 2012-12-01T20:08:23.187 回答