bpe*_*kes 2 c++ overriding virtual-functions multiple-inheritance
假设您有以下类层次结构:
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 {}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在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
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |