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

时间:2015-06-08 17:23:46

标签: c++ oop inheritance override

我有一个类层次结构,如:

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();调用?除了手动调用基类函数之外,它是否可能或没有解决方案?谢谢。

1 个答案:

答案 0 :(得分:3)

你可以让B的孩子覆盖不同的功能:

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();
    };
};