您好我有Java背景,目前正在学习C ++。在Java中,不建议直接访问实例属性,实例属性是私有的,并通过getter-setters访问。是否建议在C ++中创建类似JavaBean的东西?或者这在C ++术语中不常见?如果没有,为什么不建议用C ++创建getters-setter来访问实例属性?
答案 0 :(得分:4)
不要制造吸气剂& setters“默认”。创建封装功能,想法,算法等的类。不要创建只是一堆字段的类,或者如果你这样做,只需将它们声明为struct
并承认它们是什么:一堆相关的数据绑在一起而没有太多的封装(这是很多情况都很好。
每条规则都有例外,所以你最终会得到一些吸气剂和吸气剂。最终的setters,但是在大多数应用程序中,每个类别只有一两个(非常粗略的猜测)并没有用。
编辑注意:这只是我的观点,我还没有看到你的特定代码。也许你需要数以百计的getter和setter。我恰好怀疑它。我希望下来的选民会提出一些理由的评论。
答案 1 :(得分:3)
使用getter / setter是任何 OO驱动语言的好建议所以是的,你应通过正确公开的方法保护你的内部数据成员。
C ++语言的一个很好的副产品是那些getter / setter可能会被内联结束,这意味着它与直接访问成员一样快,只是更安全。
答案 2 :(得分:2)
这实际上是一个OO设计问题,而不是语言问题。就个人而言,我遵循思想流派“如果你有很多吸气者和变异者,你的班级设计有一个缺陷”。类的公共接口是行为,而不是它的内部结构或这种结构的某种模型。但当然,这只是一种观点,而且完全与语言无关。
C ++不鼓励的一件事是“制定者”。由于编写良好的C ++类在构造函数运行后完全正常运行(请参阅“作用域绑定资源管理”),任何类型的构造后“设置”都违背了该语言的最佳实践。
答案 3 :(得分:-1)
Getters / Setters是面向对象编程的一部分。由于C ++缺少属性(这是获得等效getter / setter的唯一方法),因此实际上没有其他方法可以在C ++中获得该功能。
所以去吧。