c++ - 如何摆脱派生类中的重复代码?

标签 c++ oop inheritance overriding

我有一个像这样的类层次结构:

class A {    
    list<A*> children;
public:
    void update() {
        do_something();
        update_current();
        for(auto child : children)
            children->update();
    }
protected:
    virtual void update_current() {};
};

class B : public A {
protected:
    void update_current() override {
        do_something_important();
    };
};

class C1 : public B {
protected:
    void update_current() override {
        B::update_current();
        do_something_very_important();
    };
};

class C2 : public B {
protected:
    void update_current() override {
        B::update_current();
        do_something_very_important_2();
    };
};

int main() {
    A* a = new A();
    //fill a's childred list somehow
    while(come_condition) {
        //some code
        a.update();
        //something else
    }
    return 0;
}

问题是:如何在不改变程序行为的情况下从派生类中删除重复的 B::update_current(); 调用?除了手动调用基类函数外,是否有可能或没有解决方案?谢谢。

最佳答案

你可以让 B 的 child 重写一个不同的函数:

class B : public A {
protected:
    void update_current() override final {
        do_something_important();
        do_something_important_later();
    };

    virtual void do_something_important_later() = 0;
};

与:

class C2 : public B {
protected:
    void do_something_important_later() override {
        do_something_very_important_2();
    };
};

关于c++ - 如何摆脱派生类中的重复代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30715418/

相关文章:

java - 在 Java 中使用监听器时维护 OO

javascript - 在 Crockford 的伪经典继承模式中使用 `this`

c++ - 好友、运算符关键字和范围解析

c++ - 如何为 C++ 代码生成调用图

python - 将状态传递给函数与调用类实例上的方法

java - java中字符流有什么用?

c++ - (简单 C++ 概念)构造函数/析构函数调用的意外输出

symfony - twig 继承和 symfony2 Controller 变量

c++ - C++ 中的继承机制是一种奇怪的初始化列表形式?

c++ - 将内联 ASM 转换为 x64 igraph 的内在