c ++不明确的双非虚函数继承

时间:2012-12-01 20:01:08

标签: c++ inheritance

假设我有2个班级:

struct a
{
    void test();
};

struct b
{
    void test();
};

现在让我们继承这些类:

class c : public a, public b
{
};

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

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

2 个答案:

答案 0 :(得分:4)

为此,您需要在void test()中实施c,并调用这两种方法。没有自动的方法。

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

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

   c* p1 = new c();
   a* p2 = p1;
   p1->test();
   p2->test();

答案 1 :(得分:0)

你的前提是错的;继承自ab不是错误。试图调用c::test()是一个错误,因为它的解决方案不明确。但是,您可以覆盖test()中的c,例如在this->a::test();中明确调用this->b::test();void c::test();