我目前有钻石设计,我看到了一个相关的问题here
在这个问题中,让我假设B类和C类是从A类继承的虚拟,所以在D类中,当我们需要调用虚函数时,我们需要指定需要调用的函数。
D::foo()
{
B::foo(); //specify foo() in B
}
对于我的钻石设计,我有很多虚函数要重写,以便通过正确的B或C父类函数调用这些函数。
这不好,需要做很多重复工作,当我有子课时,你有一些更好的解决方案,这样我就可以在D类中调用B的foo()但是没有重写这个例子上方。
答案 0 :(得分: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
;
答案 1 :(得分:-3)
我认为模板类可能会在这里发挥作用。