本帖最后由 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)
|