免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 变异老鼠
打印 上一主题 下一主题

异常安全的代码写起来还是很纠结的 [复制链接]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
31 [报告]
发表于 2011-12-04 19:28 |只看该作者
回复 25# 三月廿七

>> 这个方面java就比 c++ 先进了(其实人家还有很多人性化的设计),人家明着让你提供 get/set接口呢,
>> 而c++ 就不会...

嘿,奇了个怪,java比C++先进? 人性化?  可能有那么几个地方, 具体我也忘了。 但肯定不是你说的那个地方。

C++又不是只有且必须public, 访问控制是两种语言都有的东西。
当你需要隐藏时, 难道C++就不能private?

当需要提供非直接访问时, 两语言难道不都同样得写 get/set?  难道java还有类似C#属性那样的语法么?


>> 把成员变量都写成 public 就很糟糕了,最起码违反了 面向对像 "封装" 的规则

封装是隐藏实现暴露接口的意思, 不是函数的意思, 也不是get/set的意思。
point 直接暴露 x y 而不是 get/set+x/y 在许多情况下都是很合理的接口。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
32 [报告]
发表于 2011-12-04 19:33 |只看该作者
回复 1# 变异老鼠

试试loki::scopeguard,小巧,C++98可用的范型回滚机制。

论坛徽章:
0
33 [报告]
发表于 2011-12-04 19:40 |只看该作者
回复 31# OwnWaterloo

你知道ADT编程风格吧, ADT 可是连结构体怎么表示都不给别人看哦,
还怎么直接仿问变量??

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
34 [报告]
发表于 2011-12-04 20:05 |只看该作者
回复 33# 三月廿七

1. 当你需要ADT时, C++是不是没提供privte?
如果不是, 那java的优势, 人性化又体现在哪里?

2. struct point { int x,y; };
是否存在某些情况, 甚至是在大多数情况下, 这都是种合理的设计?
反之, 是否必须在所有情况下都 getx,gety,setx,sety 才叫合理的设计?


不要拿到了锤子就将所有问题看成钉子。 设计不是套公式。

论坛徽章:
0
35 [报告]
发表于 2011-12-04 20:23 |只看该作者
回复 25# 三月廿七


    我哪里违反了?

论坛徽章:
0
36 [报告]
发表于 2011-12-04 20:30 |只看该作者
回复 24# xhl


>>1
我觉得这个可以直接断下所有源代码中有设置该变量值的地方也可以很好的解决,当然,显然没你说的这样方便。

>>2
相当于是提供一个hook?是这个意思么?如果是这样,那这的确算是一个用场。

>>3
这一点比较赞同,毕竟一个产品不是只有一个人在写,不管什么样的编码方式,好也罢差也罢,其实都不是非常的要紧,关键是大家同一一致,这一点深有体会。

最后再次感谢您让我懂得这么多!

论坛徽章:
0
37 [报告]
发表于 2011-12-04 20:33 |只看该作者
回复 30# reiase


    调试级别的代码是不会被inline掉的。另外,在调试过程中的确可以watch变量,不过想24L说的,后面两条到的确是要害了,就是可以加hook。

论坛徽章:
0
38 [报告]
发表于 2011-12-04 20:36 |只看该作者
本帖最后由 三月廿七 于 2011-12-04 20:40 编辑
回复  三月廿七

1. 当你需要ADT时, C++是不是没提供privte?
如果不是, 那java的优势, 人性化又体现 ...
OwnWaterloo 发表于 2011-12-04 20:05

不知道, 我觉得大多数情况下都是不合理的实现方式
我觉得如果要面向对象,整个工程都要面向对象

你遇到过那种仿问一个外部变量,然后在每一个文件下都来一个
extern global_x? 的恶心代码吗?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
39 [报告]
发表于 2011-12-04 20:40 |只看该作者
回复 38# 三月廿七

第1个问题呢? java比C++优秀且人性化在哪?

第2个问题, 期待你将point实现为 getx,gety,setx,sety 并冠以oo的名义。
这会让更多还保有理性的人将自己与纯ooer之间划分界限。

论坛徽章:
0
40 [报告]
发表于 2011-12-04 20:41 |只看该作者
本帖最后由 三月廿七 于 2011-12-04 20:42 编辑
回复  三月廿七

第1个问题呢? java比C++优秀且人性化在哪?

第2个问题, 期待你将point实现为 getx ...
OwnWaterloo 发表于 2011-12-04 20:40


第一个确实是无稽之谈,set/get只是一个方法名而已,
第二个我会努力的,
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP