C_and_CPP 板


LINE

问题(Question): 各位热心的版友们,小弟是C++新手,对於C++一些细部观念掌握度不那麽高。 下列的程式题,判断起来,是在考: 程式在runtion时,呼叫了virtual function与否。 整个题组似乎考得更彻底: 除了用class本身执行内部public的function外, 还用指向class的指标去执行。 由於题组几乎全考到了,因此请教热心的版友们, 这个程式题组的执行, 直接执行function,以及使用指向class的指标去执行,结果是否有异? 谢谢各位热心的版友。 程式码(Code):(请善用置底文网页, 记得排版) #include <iostream> class Foo{ public: void f(){ std::cout << "Foo::f()" << std::endl; } virtual void g(){ std::cout << "Foo::g()" << std::endl; } }; class Bar: public Foo{ public: void f(){ std::cout << "Bar::f()" << std::endl; } virtual void g(){ std::cout << "Bar::g()" << std::endl; } }; int main(){ Foo foo; Bar bar; Foo *baz = &bar; Bar *quux = &bar; foo.f(); foo.g(); bar.f(); bar.g(); baz->f(); baz->g(); quux->f(); quux->g(); return 0; } --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.224.52.172
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1502983573.A.9FE.html
1F:推 jerryh001: 丢进电脑跑一次就知道了吧 08/17 23:42
2F:推 shadow0326: 你想知道结果的话可以直接跑跑看呀 然後提出你不懂的 08/17 23:42
3F:→ shadow0326: 部份 08/17 23:42
4F:→ longlongint: 你的想法呢 08/18 00:13
5F:→ fsvy: 回楼上j版友和s版友,我有跑过结果。 不懂的地方在於: 08/18 00:45
6F:→ fsvy: 直接执行function,及使用指向class的指标去执行, 08/18 00:46
7F:→ fsvy: 其结果为何会不同,这点与我想的不一样。 因此在版上求教。 08/18 00:47
8F:→ fsvy: 即:baz->f(); baz->g(); 这2行的执行结果。 08/18 00:50
9F:→ james732: 你可能要先去查virtual这个字的用途? 08/18 01:01
10F:推 steve1012: 这不是virtual 的本意吗 08/18 02:39
11F:→ fsvy: 那麽也请教:为什麽bar->f() 和 baz->f()结果会不同呢? 08/18 15:52
12F:→ bibo9901: 哪有不一样 08/18 16:02
13F:→ Schottky: 真的建议去看一下 virtual 这个字的作用 08/18 16:04
14F:→ bibo9901: 而且还没考用reference 08/18 16:06
※ 编辑: fsvy (36.224.47.209), 08/18/2017 17:37:45
15F:→ fsvy: 谢谢楼上s大的建议,作为新手,我会再理解virtual的用意。 08/18 17:38
16F:→ fsvy: 若有热心版友,愿意跟我说baz->f()、baz->g()、bar->f()差别 08/18 17:45
17F:→ fsvy: 就在这边和您(们)先说声感谢了 08/18 17:45
18F:推 LPH66: 关键字: "多型" 有书的话去找这个地方仔细读 08/18 18:05
19F:→ fsvy: 先谢谢楼上L大的热心,我一定会仔细研读的。 08/18 18:11
20F:推 jerryh001: 很大概的讲就是 virtual用.的就跟普通函数一样没甚麽特 08/18 19:04
21F:→ jerryh001: 别 用->会先确定该物件实际上是哪个class 然後执行该cl 08/18 19:04
22F:→ jerryh001: ass对应的函数 08/18 19:04
23F:推 s4300026: 是不是少了override? 08/18 19:37
24F:→ bibo9901: override 不是必要的 08/18 19:49
25F:推 steve1012: Virtual function 简化说是你用base class ptr 指向chi 08/18 22:49
26F:→ steve1012: ld class obj并呼叫virtual method 时候会呼叫到child 08/18 22:49
27F:→ steve1012: class 的implementation 08/18 22:49
28F:→ steve1012: 这真的随便google 就有图文解说 比看推文还要好懂很多 08/18 22:50
29F:→ steve1012: 为啥不自己上网查一下就好了... 08/18 22:50
30F:→ steve1012: 比发文还快 08/18 22:51
31F:→ poiuy777: 真心觉得在新手面前教继承根本是耍流氓 最不重要的一环 08/18 23:01
32F:推 steve1012: Override 算是好的practice 08/18 23:08
33F:→ fsvy: 谢谢steve大的热心解惑. 我想我知道疑惑点了: 08/19 01:54
34F:→ fsvy: 疑惑点是:若用base class ptr指向child class obj,却不是 08/19 01:57
35F:→ fsvy: 使用virtual method, 会执行base class method的原因。 08/19 01:57
36F:推 steve1012: 不是virtual function 不会在virtual table 里 base cl 08/19 02:19
37F:→ steve1012: ass pointer 怎麽知道child class 的function 在哪 08/19 02:19
38F:→ fsvy: 感谢steve大的解说。那若不使用base class ptr而使用. 就很 08/19 03:06
39F:→ fsvy: 明确的呼叫各自class内的method,对吗? 08/19 03:06
40F:推 steve1012: 听起来没错 08/19 08:15
41F:→ fsvy: 谢谢!谢谢steve大,以及各位热心的板友。 受教了! 08/19 15:18
42F:推 Killercat: 会有这问题大概都是java出身的 因为java没有virtual关 08/21 14:20
43F:→ Killercat: 键字,预设是每个function都是virtual除非final 08/21 14:21
44F:→ Killercat: 只能说这要花点时间习惯(@Override这annotation非强制) 08/21 14:22







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

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

TOP