打印
[菜农群课笔记]

2011.05.06课堂笔记

[复制链接]
1618|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
weshiluwei6|  楼主 | 2011-5-9 10:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hotpower 于 2012-9-22 13:16 编辑

这堂课 错过了
看到大叔说没人做笔记
就翻开聊天记录做下记录哈

2011-05-06 20:32:04

c1 v1;
c2 v2;
c1* p = &v2; //
类型向上映射。

2011-05-06 20:32:55

但:
c2* p = &v1;

2011-05-06 20:33:10

编译就会报错。

2011-05-06 20:33:50

一个派生类指针,不能指向一个基类的对象。

2011-05-06 20:35:19

如果我们确实需要让派生类指针,指向基类对象,可以使用static_cast.

2011-05-06 20:36:42

明确告诉编译器,我们就是要让p指向v1。

2011-05-06 20:38:45

先声明一下,我们不涉及泛型的多态。

2011-05-06 20:40:29

class c1 {
...
void foo() { printf("c1::foo()\n"); }
};
class c2 : public c1 {
...
void foo() { printf("c2::foo()"); }
};

2011-05-06 20:41:17

很简单,一个基类,一个派生类,两个类中有定义了 foo() 函数。

2011-05-06 20:42:09

这时候应用使用FOO函数会指向哪个?

2011-05-06 20:42:55

毫无疑问,调用c1::foo()。

2011-05-06 20:43:55

p1 = &v2; // 合法,类型向上映射。
p1->foo(); // 这次又调用哪个foo() ?

2011-05-06 20:44:17

前面加一个 c2 v2;

2011-05-06 20:45:23

c1::foo()

2011-05-06 20:45:33

菜地说说?

2011-05-06 20:46:20

Mr.Wrong(44500789) 20:45:22
c1::foo()
--------------
对了。

2011-05-06 20:46:26

俺迷糊的

2011-05-06 20:46:34

还是调用的c1::foo()

2011-05-06 20:47:13

怎样才能调用c2::foo()

2011-05-06 20:47:21

因为,p1,这个指针是 c1 类的指针。


…………………………

见附件


20110506.rar (53.2 KB)

相关帖子

沙发
hotpower| | 2011-5-9 14:12 | 只看该作者
非常感谢水王!

使用特权

评论回复
板凳
weshiluwei6|  楼主 | 2011-5-9 19:54 | 只看该作者
2# hotpower

这是我应该的 大叔

使用特权

评论回复
地板
mcs8098| | 2011-12-20 13:44 | 只看该作者
:lol

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:250水王,种菜浇水,要输就输给理想,要败就败给高手。不可浮躁

7

主题

1125

帖子

1

粉丝