[问题] 动态系结的结果问题

楼主: ArcherState (电费不缴)   2016-02-04 16:37:55
开发平台(Platform): (Ex: VC++, GCC, Linux, ...) clang++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...) null
问题(Question): 以下是我的程式码
http://i.imgur.com/eBCsnT2.png
另外问个问题,当我继承一个base class时,如何在dirived class的construct中的
initializer呼叫base class来进行初始化,因为我习惯一个class写成一个.h,而这个
问题无法解决的情况下,都让我必须在.h档里面就写完整个constructor的实作。
预期的正确结果(Expected Output):
A1 A2 B1 A2 B1 C2
预期应该是这样,我的想法是objB是以class B的类别,理当来说print1已经被override
,为什么在输出结果时objB的print1还是输出A1,这个问题在延续到objC也是存在。
谢谢。
错误结果(Wrong Output):
A1 A2 A1 A2 A1 C2
作者: sammsiontir ( )   2016-02-04 16:46:00
因为print1没有virtual所以test会呼叫A的print1呼叫objB.print1 才会是B1建议你去搞清楚virtual的用法,就会了解输出是A1
楼主: ArcherState (电费不缴)   2016-02-04 16:49:00
所以当我呼叫test()时,test()里头呼叫的方法是呼叫base的?
作者: sammsiontir ( )   2016-02-04 16:54:00
除非你定义virtual,不然都会呼叫base的
楼主: ArcherState (电费不缴)   2016-02-04 17:08:00
谢谢,请问一下第二个问题有解决的办法吗?
作者: taies (akira)   2016-02-04 23:42:00
B():A(){ //balabala } A是base B继承A 这样?
作者: LPH66 (-6.2598534e+18f)   2016-02-04 23:55:00
楼上正解, 如果要带参数也是在这里带例如 Derived(int x): Base(x) {//...}
作者: IKAFIRE (没有)   2016-02-05 14:07:00
上面的写法为何不能放在cpp档
楼主: ArcherState (电费不缴)   2016-02-05 14:39:00
可以写在cpp中,可是这样这样子在h档要怎么宣告?
作者: taies (akira)   2016-02-05 16:15:00
跟一般建构子的宣告一样
作者: LPH66 (-6.2598534e+18f)   2016-02-05 23:22:00
这个写法是定义的一部份, 所以跟着定义走宣告就照普通的方式宣告即可
楼主: ArcherState (电费不缴)   2016-02-06 00:12:00
现在没有电脑可以测试,明天试试看

Links booklink

Contact Us: admin [ a t ] ucptt.com