gpt4 book ai didi

c++ - 是否可以覆盖特定父级的虚函数?

转载 作者:搜寻专家 更新时间:2023-10-31 00:32:16 28 4
gpt4 key购买 nike

假设您有以下类层次结构:

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++ - 是否可以覆盖特定父级的虚函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31865152/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com