重载来自不同基类的同名虚函数.这可能吗?
Overloading virtual functions of the same name from different base classes. Is it possible?
标题可能让人混淆。
假设我们有如下设置:
class A
{
public:
virtual void fn() = 0;
};
class B
{
public:
virtual int fn() {};
};
class C: public A, public B
{
};
是否有办法在class C
中定义A::fn
在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() { /* ... */ }
// ...
};
不。这是不可能的。它总是与fn()
中的任何一个冲突。
fn()
的语法不同,
void fn(); // in A
, B
为
int fn(); // in B
你必须使这些语法在A
和B
相同,让C
实现fn()
。演示。
您可能想要阅读我对以下问题的回答:由于多个抽象基类,实现具有相同名称但不同的非协变返回类型的两个函数简而言之:是的,只是在称呼上有一些限制。它可以作为A(指针或引用)或B(指针或引用)调用,但不能作为C调用,因为那样会有歧义。
相关文章:
- 基类中的函数名称解析
- 如何通过派生类函数更改基类中的向量
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 使用基类指针创建对象时,缺少派生类析构函数
- 如果基类包含双指针成员,则派生类的构造函数
- C++ 继承:将子类传递给需要基类的函数并获取子类行为
- 继承和友元函数,从基类访问受保护的成员
- 使用子类覆盖基类中定义的函数
- 如何基于模板化类的基类专门化成员函数
- 基类中的默认析构函数禁用子类中的移动构造函数(如果有成员)
- 使用基类指针调用基类的值构造函数的语法是什么?
- C++重载函数,一个采用基类的参数,另一个采用派生类的参数
- 如何在基类指针向量的元素上应用重载的多态函数
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- 被覆盖的函数不会反映在基类中,这是正常行为吗?
- 在初始化列表之外手动调用基类的构造函数
- 重写打印函数而不是覆盖基类
- C++17 使用驱动类常量作为基类构造函数的参数来初始化基类构造函数
- C++虚拟函数:基类函数是调用的,而不是派生的
- 虚拟函数-基类指针