c++ - 从基类扩展功能的派生类的最佳设计

标签 c++ class oop inheritance

我有一个代码,其中派生类实现的函数是基类中相同函数的扩展。在下面的示例中,我希望函数 do_work 执行一系列任务。在派生类Derived中,do_work函数包含了基类Basedo_work函数的所有工作,包括一项额外的任务。

从软件设计的角度来看,最优雅的方法是什么?使用OPTION 1 还是使用OPTION 2

#include <iostream>

class Base
{
    public:
        virtual void do_work()
        {
            do_base_task1();
            do_base_task2();
        }
    protected:
        void do_base_task1() { std::cout << "Doing base task1" << std::endl; }
        void do_base_task2() { std::cout << "Doing base task2" << std::endl; }
};

class Derived : public Base
{
    public:
        void do_work()
        {
            // OPTION 1
            do_base_task1();
            do_base_task2();
            // END OF OPTION 1

            // OPTION 2
            Base::do_work();
            // END OF OPTION 2

            do_extra_task();
        }
    protected:
        void do_extra_task() { std::cout << "Doing derived task" << std::endl; }
};

int main()
{
    Base base;
    base.do_work();

    Derived derived;
    derived.do_work();

    return 0;
}

最佳答案

以我的愚见,最有效的版本是:

void do_work() {
  Base::do_work();
  do_extra_task();
}

因为这样,如果您更改 Base::do_work 实现,您也不必将更改传递给派生类成员函数 Derived::do_work

关于c++ - 从基类扩展功能的派生类的最佳设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37030354/

相关文章:

c++ - 同一命令的多个手册页之间有什么区别?

javascript - CoffeeScript 类中是否可以有同名的静态函数和成员函数?

javascript - 在 Javascript 中为派生类定义构造函数

c++ - 带有 GLSL 的 OpenGL 中的简单二维矩阵旋转不产生任何输出

c++ - 用于电池电压显示的平滑功能可减少嵌入式系统中的尖峰

c++ - C++ 中的 Bigint 减法

c++ - 在头文件中重新定义一个类

php - 如何让 PHP 类在其构造函数中实例化另一个类?

php - 无法在准备好的语句中比较来自 mysql 的值

C++ - 对齐内存