在下面的示例中如何去覆盖这样的功能?
显然,它不能按照我的方式编写,但是是否可以实现类似的功能?

class Foo
{
public:
    class Kid
    {
    public:
        virtual void DoSomething();
    };
};

class FirstBar : public Foo
{
public:
    void Foo::Kid::DoSomething() override;
};

class SecondBar : public Foo
{
public:
    void Foo::Kid::DoSomething() override;
};

最佳答案

我的看法-您的酒吧希望拥有自己的Kids,并正确继承:

#include<iostream>

class Foo
{
public:
    class Kid
    {
    public:
        virtual void DoSomething() {std::cout<<"Kid!\n";}
    };
};

class FirstBar : public Foo
{
public:
    class Kid : Foo::Kid {
    public:
        void DoSomething() override {std::cout<<"Kid Bar 1!\n";}
    };
};

class SecondBar : public Foo
{
public:
    class Kid : Foo::Kid {
    public:
        void DoSomething() override {std::cout<<"Kid Bar 2!\n";}
    };
};

int main() {
    Foo::Kid().DoSomething();
    FirstBar::Kid().DoSomething();
    SecondBar::Kid().DoSomething();
    return 0;
}
请注意,除非Foo定义为Kid,否则不需要从protected继承,但是我保留了继承,以防因其他原因而有意义。

关于c++ - 将子类重写为子类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62782682/

10-10 22:58