【问题标题】:Overloading virtual functions of the same name from different base classes. Is it possible? [duplicate]从不同的基类重载同名的虚函数。可能吗? [复制]
【发布时间】:2011-11-11 06:43:47
【问题描述】:
标题可能令人困惑。
假设我们有以下设置;
class A
{
public:
virtual void fn() = 0;
};
class B
{
public:
virtual int fn() {};
};
class C: public A, public B
{
};
有没有办法在class C中定义A::fn?
【问题讨论】:
标签:
c++
inheritance
virtual-functions
overriding
【解决方案1】:
C 中无法指定 C::fn() 之一
实现重载A::fn()(可能还有另一个重载
B::fn())。但是,您可以做的是引入中间体
“重命名”函数的类,例如:
class RemapA : public A
{
virtual void fnInA() = 0;
public:
virtual void fn()
{
fnInA();
}
};
class RemapB : public B
{
virtual int fnInB() = 0;
public:
virtual int fn()
{
return fnInB();
}
};
class C : public RemapA, public RemapB
{
virtual void fnInA() { /* ... */ }
virtual void fnInB() { /* ... */ }
// ...
};
【解决方案2】:
否。这不可能。它总是会与fn() 中的任何一个发生冲突。
fn()的语法不同,
void fn(); // in A
在B 中,
int fn(); // in B
您必须使A 和B 中的这些语法相同,才能让C 实现fn()。 Demo.