C_and_CPP 板


LINE

开发平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 额外使用到的函数库(Library Used): (Ex: OpenGL, ...) 问题(Question): 以下列连结的程式码为例, 假设我有一个 ParentClass, 我可以将它设定为 abstract class 来强制每个由它衍生出的子类别都必须实现 SetName(), 但我有办法确保所 有生成的物件都一定会执行到 SetName() 吗? 喂入的资料(Input):预期的正确结果(Expected Output): 所以衍生出的子类别都会执行到 SetName() 错误结果(Wrong Output): 想不到方法达成目的 程式码(Code):(请善用置底文网页, 记得排版) http://ideone.com/hhnsxT 补充说明(Supplement): 2016/1/18 23:01 更换举例用的程式码 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.132.98.137
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1453113359.A.025.html
1F:推 CoNsTaR: 写在 constructor 里面? 01/18 19:22
2F:→ icetofux: 如果指的是子类别的constructor那可能不行,因为没有强 01/18 19:29
3F:→ icetofux: 制力, 对方在继承的时候可以不去做它. 如果写在父类别 01/18 19:30
4F:→ icetofux: 的constructor里则会像我注解掉的那行一样, 发生错误. 01/18 19:31
5F:推 LPH66: 转个弯, 把需要的设定资料往上丢给 constructor 如何? 01/18 20:02
6F:→ LPH66: (我是指 parent class 的 ctor) 01/18 20:02
7F:→ LPH66: 以此例来说, 反正 gender 在 Parent 就有了 01/18 20:03
8F:→ LPH66: 那就把 "male" 或 "female" 往上丢给 Parent 让他做事 01/18 20:04
9F:→ LPH66: (也就是 SetGender 别 virtual 也别给 Child override 了 01/18 20:04
10F:→ LPH66: 把所有东西丢上来给 Parent 解决) 01/18 20:05
11F:推 LPH66: 另外关於你所提的 Error, Effective C++ 有一个项目告诫道 01/18 20:07
12F:→ LPH66: 「永远不要在建构或解构途中呼叫 virtual 函数」 01/18 20:07
13F:→ LPH66: 简单原因是建构/解构时 virtual 并不 virtual 01/18 20:08
14F:→ LPH66: 更多请参照 www.artima.com/cppsource/nevercall.html 01/18 20:09
15F:→ icetofux: To LPH66: 谢谢你给的建议, 这个例子是简化过的, 事实 01/18 20:13
16F:→ icetofux: 上string中的文字可能有非常多种, 我一时想不出更好的 01/18 20:14
17F:→ icetofux: 举例方式才简化成这样的. 01/18 20:14
18F:推 LPH66: 换个方式想, 如果该函式重要到每个继承者都要设定 01/18 20:16
19F:→ icetofux: 另外也很感谢你针对 virtual 函数给的提示, 我从未注意 01/18 20:16
20F:→ icetofux: 过这问题. 01/18 20:16
21F:→ LPH66: 那那些「重要的部份」正是可以抽出来写在 parent 的 01/18 20:17
22F:→ LPH66: 这样一来 Parent 只需要接收部份子 class 不同的资讯 01/18 20:17
23F:→ LPH66: 即可执行这些重要部份,那就自然变成子 class 透过 parent 01/18 20:18
24F:→ LPH66: 的 ctor call 把不同的资讯往上传让 Parent 做事 01/18 20:18
※ 编辑: icetofux (220.132.98.137), 01/18/2016 21:02:02
25F:→ LPH66: 一样的道理啊, 跟资料是二选一还是 N 选一无关 01/18 21:17
26F:→ LPH66: 重点是把设定程序抽出来写在 Parent,关键资讯再由子 class 01/18 21:18
27F:→ LPH66: 藉 ctor 往上传上去使用 01/18 21:18
28F:推 LPH66: 大概就像这个样子 http://ideone.com/5Lhqx8 01/18 21:23
29F:→ icetofux: 谢谢你的范例, 这应该是我要的效果没错, 刚刚查了一下 01/19 00:15
30F:→ icetofux: 这种建构後面加冒号的写法, 感觉好实用, 又多上了一课. 01/19 00:17
31F:推 LPH66: 呃, 这个是建构子初始化成员/父类别的标准写法啊... 01/19 02:08







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灯, 水草

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

TOP