我有一个代码,其中派生类实现的函数是基类中相同函数的扩展。在下面的示例中,我希望函数 do_work
执行一系列任务。在派生类Derived
中,do_work
函数包含了基类Base
do_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/