是否有可能重写特定父类的虚函数
Is it possible to override the virtual function of a specific parent?
假设您有以下类层次结构:
class A
{
public:
virtual void foo() {}
}
class B
{
public:
virtual void foo() {}
}
class C: public A, public B
{
public:
virtual void foo() override { } // This overrides both
}
class D: public A, public B
{
public:
// Is there syntax so that there is a separate override for each?
// Maybe something like:
// virtual void A::foo() override {}
// virtual void B::foo() override {}
}
是否有办法在类D上有两个foo函数,这样,如果D作为a的引用传递,则调用D中的一个函数,如果D作为B的引用传递,则调用D中的另一个函数?
用例将是,如果你从两个外部库继承,他们只是碰巧有重叠的功能说明符?
您不能完全做到这一点,但是Stroustrup自己演示了一个解决方法。
class A_foo_renamer : public A
{
virtual void A_foo () = 0;
virtual void foo() override { A_foo(); }
};
class B_foo_renamer : public B
{
virtual void B_foo () = 0;
virtual void foo() override { B_foo(); }
};
class D: public A_foo_renamer, public B_foo_renamer
{
virtual void A_foo() override {}
virtual void B_foo() override {}
// leave A::foo and B::foo alone
};
相关文章:
- 父类的私有函数会导致对具有相同名称和相似参数的子类中的公共函数的不明确调用
- 两个父类的构造函数的序列
- C++调用使用重写函数的父类函数
- 在父类中公开受保护的构造函数
- 从父类的向量访问子类函数,而无需向下转换
- 将派生类的构造函数声明为父类的友元
- 如何从子类的构造函数初始化父类的私有成员
- 具有纯虚函数和指针数组对象类型的父类的指针数组
- 在父类函数中创建子类 - 可能吗?
- 调用父类函数来比较父类和子类
- 从多重继承中的派生类函数调用适当的父类函数
- 是否有 lint 工具可以检查子类虚拟函数是否与父类定义匹配?
- 无法使父类的虚拟函数正常工作
- 重写子类构造函数中的父类变量
- 构造函数将父类作为参数
- 父类有 26 个构造函数重载.如何在不复制+粘贴 26 个重载的情况下将一个小任务附加到所有构造器?
- 如果不手动完成,子类是否继承父类的析构函数?
- 当函数返回类型为父类时,如何返回子类的对象?
- 将子类的成员函数强制转换为父类
- 如何将 std::unique_ptr<Parent> 与具有受保护虚拟析构函数的只读父类一起使用