0

我目前有一个钻石设计,我在这里看到了一个相关的问题

在那个问题中,我假设 B 类和 C 类是从 A 类虚继承的,所以在 D 类中,当我们需要调用虚函数时,我们需要指定需要调用哪个虚函数。

D::foo()
{
  B::foo(); //specify foo() in B
}

对于我的菱形设计,我有很多虚函数要重写,以便让这些函数被正确的 B 或 C 父类函数调用。

不好,需要做很多重复的工作,当我有子类时,你有没有更好的解决方案,以便我可以在 D 类中调用 B 的 foo() 但不重写上面的示例。

4

2 回答 2

1

从 C++11 开始,您可以使用别名:

class A
{
    public:
        virtual void foo() { cout << "A" << endl; }
}


class B : public virtual A
{
    public:
        void foo() { cout << "B" << endl; }
}


class C : public virtual A
{
    public:
        void foo() { cout << "C" << endl; }
}

class D : public B, C
{
    using B::foo;
}

这样,做:

D obj;
obj.foo();

将输出B

于 2013-11-15T23:53:20.953 回答
-3

我认为模板类可能会在这里解决问题。

http://www.cplusplus.com/doc/tutorial/templates/

于 2013-11-15T22:47:18.977 回答