C++程序中是否应该将所有的类成员变量都定义为private

shuirh 2011-03-01 01:06:30
effective c++中说, 要将类的所有成员变量都定义为private, 然后提供一个get()接口以供外部程序调用,这样安全性好.

在实际工作中, 我发现这样做并不是很方便, 如果外部程序不是经常需要使用这个类成员变量的话, 这样get, 对程序的效率影响不大, 但是如果是在需要经常使用这个类成员变量的时候, 比如在定时器中, 这样频繁的get, 无疑是影响了程序的效率.

如果说在这个外面的类中定义一个类成员变量去接受这个内部类的类成员变量一次,以后就再不用get了, 我感觉这样写, 外部的类又不是很纯净.


请教大家在处理这个矛盾的问题的时候, 你们的策略是怎么样的啊???
...全文
296 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhddzz 2011-03-01
  • 打赏
  • 举报
回复
C#没有那种“内建set和get”的特性吧
只是提供了自动属性语法
要直接公开字段还是可以的
辰岡墨竹 2011-03-01
  • 打赏
  • 举报
回复
以后C++中也应该会引入_set和_get关键字吧,那样的话,即使直接赋值和直接表达式运算都会进行检查了。
qwer_boo 2011-03-01
  • 打赏
  • 举报
回复
同意二楼的
fengzhw 2011-03-01
  • 打赏
  • 举报
回复
对这种getter/setter,private + inline 才是最好的处理办法;
昵称很不好取 2011-03-01
  • 打赏
  • 举报
回复
可以inline,毕竟public容易造成误用
辰岡墨竹 2011-03-01
  • 打赏
  • 举报
回复
如果你的几个类的耦合程度比较高,需要协作的话,就开放一些,但是如果某个成员变量有明确的取值范围要求,或者一旦出现取值错误可能导致严重后果的,或者当某值改变时有些必要操作的话就那样做。其实这样是个好习惯,像C#里已经内建了get、set。任何一个成员变量直接在表达式中用到都会进行get、set检查。
此外如果你的类是要与外部交互的接口的,也最好那样,把内部实现细节隐藏起来。
bdmh 2011-03-01
  • 打赏
  • 举报
回复
有些人就是为了方便才不按规则办事,这就是规则,你可以不用,保护属性,是你应该做的,get和set不但可以简单的为属性赋值,还可以同时加入其它处理,而直接赋值,就一个=号,你干不了别的事
zhangsongcui 2011-03-01
  • 打赏
  • 举报
回复
我个人的想法:
如果一个类成员变量既有put又有gei,且类型安全+无特殊操作,那么可以将其直接共有

64,400

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧