C_and_CPP 板


LINE

最近看到专案内一些用法觉得不太合理想提出来看大家有什麽看法 class Foo : public / private IBarListener (1) { public / private: (2) void OnBarXxx() override; public: Foo(){ 这边会把this 注册给listener} }; 以上(1)(2)有四种组合 我自己觉得都该用public 较为合理 我的想法是 1. c# java 等语言继承interface也必须维持在public field(虽然我无法明确说出这样 的用意) 2. private继承 语意上变成了"has a" 根本不太合理 这边刚好是在自己的建构子注册给 别人,别人才能用base pointer来接. 3. 写在public field 我认为好处是 有可能别人不是用base class接 却想callback,如果有这需求就不需改code 另外就是unit test也可以直接呼叫. 但这边盲点就是,其实别人不该直接invoke concrete class的 callback, 摆在private 似乎也合理? 因为被盲目的说大家习惯都用private这样写, 要求修改.... 不是很认同,提出来请教 谢谢 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 27.242.203.236
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1530235066.A.2A7.html
1F:→ hsnuyi: (1) 用public是因为应该用内部的public protected private 06/29 11:56
2F:→ hsnuyi: 来控制 而不是在继承时控制 这种做法google就有很多讨论 06/29 11:56
3F:→ loveflames: 如果是要设计成interface(is/can-do/weak is-a) 06/29 12:04
4F:→ loveflames: 那就应该采用public继承 06/29 12:05
5F:→ loveflames: 2要不要用public是看IBarListener里面怎麽写,只要确 06/29 12:06
6F:→ loveflames: 保Foo跟IBarListener表面上行为一致就行 06/29 12:06
7F:→ loveflames: 除非你要搞"controlled polymorphism" 06/29 12:11
8F:→ loveflames: 上面这个技术在Exceptional C++有提过,算是C++特有 06/29 12:11
9F:推 shadow0326: 大部分private继承都可以用composition代替 06/29 13:16
10F:→ tinlans: private 继承不只是哲学上 is-a 关系不存在而已, 06/29 13:29
11F:→ tinlans: 语言机制层级也会把多型禁用,写成 private 继承的话, 06/29 13:30
12F:→ tinlans: IBarListener * 没办法指向 Foo 的 instance。 06/29 13:31
13F:→ loveflames: private继承基本上用在实作继承,而且是能用组合时就 06/29 13:36
14F:→ loveflames: 不用private继承 06/29 13:36
15F:→ loveflames: http://www.gotw.ca/gotw/040.htm 06/29 13:37
16F:→ loveflames: 除非要用到上面这个东西,这个也是protected继承目前 06/29 13:37
17F:→ loveflames: 的唯一用途 06/29 13:38
18F:→ loveflames: 如果不局限在物件导向,policy based design会很常看 06/29 13:44
19F:→ loveflames: 到private继承,因为policy相当於private base 06/29 13:44
20F:→ lovejomi: @tinlans, base可以指向Foo阿 只是要在Foo里面注册 06/29 18:02
21F:→ lovejomi: Controlled Polymorphism 06/29 18:09
22F:→ lovejomi: Controlled Polymorphism 06/29 18:09
23F:→ lovejomi: 还真不知道实际上用途...限制某些函数才能使用多型orz.. 06/29 18:09
24F:→ lovejomi: . 06/29 18:09
25F:→ loveflames: 这用途应该很稀有,我是有想过一个"视为"的关系 06/29 19:00
26F:→ tinlans: 注册? 我没有听过这种说法,是什麽特殊平台吗? 06/29 23:19
27F:→ tinlans: 还是说你写个 getBase() 在 foo 让它传回 base? 06/29 23:21
28F:→ tinlans: 这样拿是可以,但语法上的多型还是依然不会作用。 06/29 23:27







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP