MeL*_*ode 5 c++ polymorphism pointers
当函数需要返回一个对象时.它应该通过指向派生或基础的指针返回吗?
class B{
}
class D:public B{
}
// way 1: return pointer to derived
D* createDerived(){
D* d = new D();
return d;
}
// way 2: return pointer to base
B* createDerived(){
B* d = new D();
return d;
}
Run Code Online (Sandbox Code Playgroud)
我听说过"接口而不是实现的程序",这表明我们应该返回一个指向base的指针.但是我的直觉说在这种情况下返回指向派生的指针会更好,因为如果客户端代码使用基本指针,这个函数仍然可以工作!另一方面,如果我们返回指向base的指针而客户端代码使用派生指针,则这对它们不起作用.看起来通过返回一个更"特定"的指针,我们可以为客户端代码提供更大的灵活性.
另一种看待它的方式是从"合同计划"的角度来看.其中一个建议是尽可能少地承诺.通过承诺我们将返回一个非常具体的对象,我们遵循这个规则.但是,如果我们返回一个基本指针,在我看来,我们承诺更多.
哪个更好的设计?我的推理是否正确?
关于如何制作模块化,可维护,可扩展的软件,我有很多东西需要学习,所以请原谅我的推理/结论是否正常.我对学习很感兴趣.非常感谢您的参与.
| 归档时间: |
|
| 查看次数: |
1070 次 |
| 最近记录: |