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

基类的析构含糊都必须是virtual的

虚函数只能借助于指针或者引用来达到多态的效果。

前提B类继承与A类 且foo()为虚函数

void bar(A *a)

{

a->foo();//被调用的是A::foo()还是B::foo() ?

}

如果a指向的是A类的实例,则A::foo()被调用,如果a指向的是B类实例,则指向 B::foo();

在设计一个基类的时候,如果发现一个函数需要在派生类里有不同的表现,那么它就应该是虚的。 从设计角度讲,出现在基类中的虚函数是接口,出现在派生类中的虚函数是接口的具体实现。通过 这样的方法,就可以将对象的行为抽象化。

虚函数总是在派生类中被改写,这种改写被称为“override”。

override是指派生类重写基类的虚函数。重写的函数必须有一致的参数表和返回值(允许返回值不同)

纯虚函数不需要定义其实际操作,它的存在只是为了在派生类中被重新定义,只是为了提供一个多态接口。

只有拥有纯虚函数的类,就是一种抽象类,它是不能被实例化的。

virtual void foo()=0;  //标志一个虚函数为纯虚函数 (=0)

补充:如果类B继承了A之后,A是抽象类,如果类B没有改写A中的纯虚函数,那么B本身也就成为一个拥有纯虚函数

的类,也就变成抽象类了。

内联函数,构造函数,静态成员函数为什么不能为virtual函数?

重点虚函数是运行期间确定的

1 >   内联函数

内联函数是在编译时期展开,而虚函数的特性是运行时才动态联编,所以两者矛盾,不能定义内联函数为虚函数

2 >   构造函数

构造函数用来创建一个新的对象,而虚函数的运行是建立在对象的基础上,在构造函数执行时,对象尚未形成,所以不能将构造函数定义为虚函数

3 >   静态成员函数

静态成员函数属于一个类而非某一对象,没有this指针,它无法进行对象的判别

最新文章

  1. javascript中对象字面量的理解
  2. 30、shiro框架入门2,关于Realm
  3. Spring mvc4 + ActiveMQ 整合
  4. C++学习12 友元函数和友元类
  5. jmeter随笔(10)-中文url编码问题
  6. js中Number数字数值运算后值不对
  7. C语言链表全操作(增,删,改,查,逆序,递增排序,递减排序,链式队列,链式栈)
  8. web系统
  9. mysql错误:Error Code: 1175. You are using safe update mode and you tried to update a table……
  10. 【MS SQL】通过执行计划来分析SQL性能
  11. android通过程序收起通知栏
  12. C#程序遍历数组A中所有元素
  13. Python之argparse模块
  14. 通过 kms 激活 office 2016
  15. java juint框架的windows自动化-自动运行juint程序简述
  16. python的time模块常用内置函数
  17. 计算C#程序执行时间
  18. 2017-2018-2 20165314实验二《Java面向对象程序设计》实验报告
  19. C++编程学习50个经典网站 强力推荐(转载)
  20. 如何扎实自己的Java基础?

热门文章

  1. vue2.0组件生命周期探讨
  2. sccm系统更新补丁后服务无法正常启动
  3. Halcon学习笔记1
  4. axios添加了header信息后发送的get请求自动编程option请求了
  5. 使用snapshot继续训练网络
  6. pc端移动端兼容的大图轮播
  7. node.js从入门到放弃(一)
  8. Mysql中max函数取得的值不是最大
  9. mac 监控文件变化并重启php
  10. POJ 1236 Network of Schools (强连通分量缩点求度数)