CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

如何理解这个例子?(有关虚函数)

楼主wanghu(不懂就是不懂)2001-03-12 11:49:00 在 VC/MFC / 基础类 提问

class   cdoc  
  {  
    void   func()  
        {serialize();}  
    virtual   void   serialize()  
        {cout<<"cdoc::serialize";}  
  }  
   
   
  class   cmydoc:public   cdoc  
  {  
    virtual   void   serialize()  
        {cout<<"cmydoc::serialize";  
  }  
   
   
  void   main()  
  {  
  cmydoc   mydoc;  
   
  ((cdoc*)(&mydoc))->func();  
   
  ((cdoc)mydoc).func();  
  }  
   
   
  结果分别为cmydoc::serialize和cdoc::serialize  
   
  第二个结果为何这样?  
  问题点数:30、回复次数:5Top

1 楼xyzboat(一叶小舟)回复于 2001-03-12 11:59:00 得分 0

这个问题其实是有虚函数的特点决定的:  
  当用一个指向基类的指针访问一个虚函数时,C++要根据该指针在运行时指向的对象类型来确定访问哪个函数.  
   
  Top

2 楼sun2000(非常可乐)回复于 2001-03-12 12:08:00 得分 0

虚函数本来就是这么回事Top

3 楼wanghu(不懂就是不懂)回复于 2001-03-12 12:55:00 得分 0

我想问的是:  
      两个方法为何不同?Top

4 楼RedFire(丹焰)回复于 2001-03-12 14:25:00 得分 0

很简单,一个用的是指针,一个没有用!虚函数的实现有关键的两点,virtual以及指针或者引用调用。Top

5 楼joke100(咱们去SLEEP吧...)回复于 2001-03-12 14:33:00 得分 30

实际中需要在不同类层次中对同一种行为做出不同的响应,为了使程序代码有更高的独立性,对同一种行为使用同样的方法名称,但究竟做出什么样的响应由类自己提供,这就是C++中虚函数最动人的地方.  
   
  ((cdoc)mydoc).func();这一句使用强制转换把cmydoc类型的对象转换成了cdoc类型对象,这种对对象实体的强制转换的结果是对象实体被切片,也就是说派生类多出的一块被干掉,只剩下基类那么大小,比如基类对象大小为8个字节,派生类对象为10个字节(一定不小于基类对象),那么派生类对象切片后由原来的10个字节变成了8个字节!!!  
  一般来讲应用虚函数应当使用对象的指针来进行,这样才能得到C++的运行时绑定特性.  
   
  最常见的应用是这样的:  
  cmydoc   mydoc;  
  cdoc*   pDoc   =   &mydoc;  
  pDoc->func();       //   这一句执行的是cmydoc的func,就是运行时绑定,不会破坏对象  
   
  Top

相关问题

  • 散分,虚函数的一个典型例子
  • 兄弟们给个纯虚函数的例子给我
  • 如何在基类的构造函数中调用纯虚函数,最好给个例子!
  • 怎样理解"虚构造函数是没有意义的"?
  • 虚函数?
  • 纯虚函数!
  • 虚函数
  • 谁能给一StretchBlt函数的例子
  • 谁能给我CopyMemory函数的例子?
  • 求一个回调函数的例子

关键词

  • c++
  • 指针
  • 转换
  • cdoc
  • 虚函数
  • 对象
  • cmydoc
  • mydoc
  • 派生
  • 基类

得分解答快速导航

  • 帖主:wanghu
  • joke100

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo