CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

讨论:C++中虚函数是何意?

楼主jluhs()2002-11-25 19:27:25 在 VC/MFC / 基础类 提问

常说虚函数,但是现在我还不了解什么是虚函数,怎么直观地表白?它和常用的函数有何本质的区别? 问题点数:20、回复次数:9Top

1 楼gaohengwei()回复于 2002-11-25 19:29:38 得分 0

简单的说虚函数没有真正意义的函数实体,等待自类来重载实现多种功能,你可以找找这方面的资料看看Top

2 楼rivershan(阿门)回复于 2002-11-25 19:51:09 得分 5

去看书~  
  主要用途我想是为了动态识别吧~  
  说大一点是为了符合面向对象~Top

3 楼xsc2001(程序人生)回复于 2002-11-25 20:11:05 得分 5

虚函数实际上就是没有定义其具体实现过程且可重载的成员函数,通过重载可实现其具体的功能!Top

4 楼cbc(逍遥子)回复于 2002-11-25 20:20:04 得分 5

实现动态连编,即执行哪个函数不是编译时就决定的,而是运行时才绑定的.  
   
  for   example:  
  比如你想定以几个类来表现狗和猫的行为,它们都会叫,但是叫声不同(猫为喵喵,狗为汪汪),你就定义一个基类:  
  class   Animal  
  {  
        public:  
              virtual     void   voice();  
  };  
  class   Dog  
  {  
      public:  
              void     voice(){//定义狗的行为}  
  };  
  class   Cat  
  {  
          public:  
                void   voice(){//定义猫的行为}  
  };  
  这样的话当你这样用的时候:  
  Dog   d;  
  Cat   c;  
  Animal   *   pa;  
  pa=&d;  
  pa->voice();//调用Dog::voice()  
  pa=&c;  
  pa->voice();//调用Cat::voice()  
  你可以通过调用同一个函数而视指针所指对象的不同而调用不同版本的函数。  
  Top

5 楼riverboat(诸葛不亮)回复于 2002-11-25 20:26:47 得分 5

主要是为了能通过基类的指针调用派生类的同名函数(方法):  
   
  class   Base{  
      Base(){}  
      ~Base(){}  
      virtual   void   DeclareIt(){AfxMessageBox("I   am   in   Class   Base");}  
  }  
   
  class   Derived   :   public   Base   {  
      Derived(){}  
      ~Derived(){}  
      virtual   void   DeclareIt(){AfxMessageBox("I   am   in   Class   Derived");}  
  }  
   
  void   DoSomething(Base*   p){  
      p->DeclareIt();  
  }  
   
  main(){  
      Base   a;  
      Derived   b;  
      DoSomething(&a);     //   调用Base的DeclareIt()  
      DoSomething(&b);     //   调用Derived的DeclareIt()  
   
      Base*   p[2];  
      p[0]   =   new   Base;  
      p[1]   =   new   Derived;  
      for(int   i=0;   i<2;   i++){  
          p[i]->DeclareIt();     //   i=0时将调用Base::DeclareIt,   i=1   调用   Derived::DeclareIt  
      }  
  }Top

6 楼arcnode(小二哥)回复于 2002-11-25 20:31:16 得分 0

容易啊  
  Top

7 楼arcnode(小二哥)回复于 2002-11-25 20:31:25 得分 0

测试程序  
  Top

8 楼arcnode(小二哥)回复于 2002-11-25 20:31:35 得分 0

sorry,我测试  
  Top

9 楼jluhs()回复于 2002-11-28 19:08:46 得分 0

我看书上说:虚函数主要实现动态晚绑定,还有就是说不根据调用函数的指针类型来调用函数,还是很迷糊。我想知道,虚函数一般都在什么场合下使用呢?是不是对虚函数的使用没有什么限制(只要能实现功能,且性能稳定)?Top

相关问题

  • [讨论]虚函数可以是内联函数吗?
  • C++中为什么析构函数可以是虚函数,而构造函数不可以是虚函数?
  • 有关函数指针的讨论(援引自Thinking in C++ 2nd)
  • 快来啊!!!大家讨论一下c函数库问题吧!
  • **C++ Primer讨论题系列[16]:关于函数的返回值**
  • 请教一个C++虚函数问题.
  • 请教一个C++虚函数问题
  • C++中的虚函数问题
  • C++中虚拟函数表的问题
  • c++中虚函数是什么意思?

关键词

  • 函数
  • 指针
  • virtual
  • declareit
  • 调用
  • 虚函数
  • voice
  • derived
  • pa
  • 实现

得分解答快速导航

  • 帖主:jluhs
  • rivershan
  • xsc2001
  • cbc
  • riverboat

相关链接

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

广告也精彩

反馈

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