凌云窟
南山巅上火麟烈,北海潜深雪饮寒。可怜两锋未缘见,雪刀封隐孤剑鸣。
<2006年8月>
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

留言簿(0)

随笔分类

随笔档案

文章档案

相册

简历下载

搜索

最新评论

阅读排行榜

评论排行榜

 
VC知识库BLOG   首页  新随笔  联系  聚合  登录 
  随笔-22 文章-0 评论-38 Trackbacks-0
2006年8月2日
       用代码说话吧。
如下:

class B
{
public:
 
virtual int Comment(int v)
{val = v;cout<<"Base"<<endl;return v;};
protected:
int val;
}
;
class D : public B
{
int Comment (int v)
{val = v;cout<<"Drived"<<endl;return v;};
private:
int val;
}
;
int main(int argc, char* argv[])
{
B
* bptr = new D;
bptr
->Comment(99)  ;  // 标准多态行为
(*bptr).Comment(99);  // 这样也是多态?从结果来看,的确是
system("pause");
return 0;
}


   bptr->Comment(99)这种用->应该是最典型的多态调用的方式,(*bptr).Comment(99)这种首先用*解引用指针然后用.来调用函数既然也能够多态,这大大改变了我以前的认知,甚至我现在还很怀疑这个结论成立否?不过在汇编成面上,他们的代码是一样的,这个证据让我还是很相信这个结论的正确性的。如果我的这份结论是错误的,请大家指出!

发表于 2006-08-02 11:30 莫问春秋 阅读(4030) | 评论 (6)编辑 收藏