作者siriusu (かがみは俺の嫁。)
看板C_and_CPP
标题[问题] Inheritance
时间Thu Jun 11 21:01:24 2009
我首先写了一个Package Class
里面有一个showDetail()是把Package中的各个data member照格式输出
该function有呼叫一个Package中的函式calculateCost()
然後我定义了一个derived class TwoDayPackage
并且overload掉原本的calculateCost()
结果在main里面宣告一个属於TwoDayPackage的object p1并且call
p1.showDetail();
结果显示出来的资料并不是overload以後的calculateCost()算出来的结果而是
Package::calculateCost算出来的结果
我就想说是不是base class里面的function如果有call 该base class 内的另一个
member function时就算有overload掉还是会call base class里的那一个
所以又在TwoDayPackage里面定义了(一样的)showDetail()
结果compile起来有时候是对的有时候是错的
请问这是compiler defined的东西吗 还是我compiler的问题
囧 我是用devcpp 我知道很多人不喜欢他不过我们教授是用他所以我也跟着用
最後我是在main里面直接p1.TwoDayPackage::showDetail才正确
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.65.45
1F:推 POSIX:derived class 是包含base class的东西 当然连calculateCost 06/11 21:18
2F:→ POSIX:也会在内 你後来那个推论是对的 至於"有时候对 有时候错" 06/11 21:19
3F:→ POSIX:你就要好好trace你的程式 到底哪时後会对 哪时後会错 06/11 21:19
4F:→ siriusu:可是我有在TwoDayPackage里面重写一个calculateCost 06/11 21:21
5F:推 POSIX:不过 如果老师没限制作法 不妨考虑virtual function 06/11 21:22
6F:→ siriusu:这样在call p1.showDetail 然後由showdetail去call 06/11 21:23
7F:→ siriusu:calculateCost 的时候他会call的是derived class里面定义 06/11 21:23
8F:→ siriusu:的那个还是base class里面定义的那个呢? 06/11 21:23
9F:推 legnaleurc:你做的不是 overloading, 而是 redefining 06/11 21:24
10F:→ siriusu:注:我想请教的是showDetail只有base class里有的情况 06/11 21:24
11F:→ legnaleurc:你这样做只会造成名称遮蔽而已 06/11 21:25
12F:→ siriusu:啊对 l大说对了 我讲错了 囧> 06/11 21:26
13F:→ legnaleurc:Dev-C++ 也不是 compiler 06/11 21:26
14F:推 POSIX:应该是在你dervied class内去call base class member func() 06/11 21:30
15F:→ POSIX:配合你derived class 所要的功能 而不是从写一个 06/11 21:31
16F:→ siriusu:查了一下原来应该要说是IDE才正确~受教了 06/11 21:36
17F:→ siriusu:P大是说在derived class里面的shodetail使用TwoDayPackage 06/11 21:37
18F:→ siriusu:::calculateCost吗? 我现在比较好奇的是照我上面 06/11 21:39
19F:→ siriusu:calculateCost有redefine showDetail没有的情况下 06/11 21:40
20F:→ siriusu:去宣告一个TwoDayPackage的物件P然後P.showDetail 06/11 21:41
21F:→ siriusu:出来的结果showDetail 呼叫的是base class的calculateCost 06/11 21:42
22F:→ siriusu:是正常的吗 还是不能确定要看平台? 06/11 21:42
23F:→ siriusu:在读redefine这部分想搞清楚而不是想请教其他写法~ 06/11 21:43
24F:→ siriusu:谢谢! 06/11 21:43
25F:推 legnaleurc:read virtual function first 06/11 21:47
26F:→ siriusu:好的,谢谢 希望对管院来说不会太深XD 06/11 21:57