将接口或引用作为参数传递给函数

时间:2016-08-17 11:38:56

标签: c++ oop parameters

我有包装类,我已将其对象传递给函数。

class wrapper
{
/// some functionality
}

作为对

类的引用传递更好
fun(wrapper & ob)

或由包装器继承的新接口,如:

class Interface
{
}
 ....
class wrapper:public Interface
 ...
fun(Interface& ob)

2 个答案:

答案 0 :(得分:3)

如果您希望函数只接受wrapper类的实例,请使用

fun(wrapper& ob)

fun(const wrapper& ob)

如果您不打算修改它。

如果你希望你的函数接受任何实现Interface类的东西(只有在继承自wrapper的{​​{1}}之后才有更多的类),那么使用:

Interface

fun(Interface& ob)

选择取决于用例。

答案 1 :(得分:2)

如果符合以下条件,Interface方法会更好:

  1. 您希望关注Liskov substitution principle,以后能够将wrapper替换为其他一些实现Interface
  2. 的类
  3. 您希望隐藏wrapper用户的fun实施内容 - 即您在{{{{}}之前不需要#include wrapper.h 1}}声明
  4. 依旧......
  5. 通常 更好地与fun一起从界面抽象实现,但也不要忘记“not pay for what you don't use”原则,即如果你知道你赢了&#39 ; t Interface Interface以及wrapper wrapper.h的任何实施都需要Interface #in}对于您的项目来说不是问题,而是与<script type="text/javascript"> var a1; function fn_disable() { a1.disable(); } $(function() { a1 = $('#tablename').autocomplete({ serviceUrl:'/lookup', minChars:3, delimiter: /(,|;)\s*/, maxHeight:400, width:520, zIndex: 9999, deferRequestBy: 50, noCache: false }); }); </script> 一起over-design