Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 590|回复: 0

开发交流:C++虚函数与纯虚函数用法与区别

[复制链接]

该用户从未签到

发表于 2011-10-24 10:15:57 | 显示全部楼层 |阅读模式
C++虚函数与纯虚函数用法与区别
  
1.虚函数和纯虚函数可以定义在同一个类(class)中,含有纯虚函数的类被称为抽象类(abstract class),而只含有虚函数的类(class)不能被称为抽象类(abstract class)。
  
2.虚函数可以被直接使用,也可以被子类(sub class)重载以后以多态的形式调用,而纯虚函数必须在子类(sub class)中实现该函数才可以使用,因为纯虚函数在基类(base class)只有声明而没有定义。



  
3.虚函数和纯虚函数都可以在子类(sub class)中被重载,以多态的形式被调用。


  
4.虚函数和纯虚函数通常存在于抽象基类(abstract base class -ABC)之中,被继承的子类重载,目的是提供一个统一的接口。


  
5.虚函数的定义形式:virtual {method body}
  纯虚函数的定义形式:virtual { } = 0;
在虚函数和纯虚函数的定义中不能有static标识符,原因很简单,被static修饰的函数在编译时候要求前期bind,然而虚函数却是动态绑定(run-time bind),而且被两者修饰的函数生命周期(life recycle)也不一样。



6.虚函数必须实现,如果不实现,编译器将报错,错误提示为:
error LNK****: unresolved external symbol "public: virtual void __thiscall
ClassName::virtualFunctionName(void)"


7.对于虚函数来说,父类和子类都有各自的版本。由多态方式调用的时候动态绑定。


8.实现了纯虚函数的子类,该纯虚函数在子类中就编程了虚函数,子类的子类即孙子类可以覆盖
该虚函数,由多态方式调用的时候动态绑定。


9.虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的
函数



10、多态性指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作。C++支持两种多态性:编译时多态性,运行时多态性。
a.编译时多态性:通过重载函数实现
b 运行时多态性:通过虚函数实现。


  11. 如果一个类中含有纯虚函数,那么任何试图对该类进行实例化的语句都将导致错误的产生,因为抽象基类(ABC)是不能被直接调用的。必须被子类继承重载以后,根据要求调用其子类的方法。
   
  //father class



  class Virtualbase



  {



  public:



  virtual void Demon()= 0; //prue virtual function



  virtual void Base() {cout<<"this is farther class"<};



  }



  //sub class



  class SubVirtual :public Virtualbase



  {



  public:



  void Demon() { cout<<" this is SubVirtual!"<



  void Base() { cout<<"this is subclass Base"<



  }



  /*



  instance class and sample



  */



  void main()



  {



  Virtualbase* inst = new SubVirtual(); //multstate pointer



  inst->Demon();



  inst->Base();



  // inst = new Virtualbase();



  // inst->Base()



  return ;



}
复制代码




参考:
1.    http://blog.csdn.net/wuchuanpingstone/article/details/6742465
这篇文章分析了虚函数的底层实现,大家可以看看,我2年没看过C++了,我是看不懂了。
2.    http://blog.sina.com.cn/s/blog_4b44e1c001000avp.html
这篇讲的还算简单明了吧。
3.  http://www.vckbase.com/document/viewdoc/?id=950


最后留下我的新浪微博,求关注啊:shichaosong。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 02:52 , Processed in 0.345841 second(s), 34 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表