C++中的虚函数指的是class类中加上了关键字virtual的函数。

虚函数的意义在于动态绑定,也就是说父类指针可以调用子类的函数实现,示例如下:

#include "stdio.h"class Animal {public:virtual void name() { printf("I'm Animal\n"); }
};class Cat : public Animal {public:virtual void name() override { printf("I'm Cat\n"); }
};void func(Animal *animal) {animal->name();
}int main(void) {func(new Animal());func(new Cat());return 0;
}

输出的结果如下:

I'm Animal
I'm Cat

这里可以看出虽然函数里是父类的指针,但是实际调用的函数根据传进来的类动态变化。


下面是另外一个例子:

#include "stdio.h"class Animal {public:virtual void name() { printf("I'm Animal\n"); }
};class Cat : public Animal {public:virtual void name() override { printf("I'm Cat\n"); }
};void foo(Animal a, Cat b, Animal *r) {a.name();b.name();r->name();
}int main(void) {Cat b;foo((Animal) b, b, &b);return 0;
}

运行结果如下:

I'm Animal
I'm Cat
I'm Cat

这段代码人意思很好理解,我们着重看一下foo函数的汇编代码:

可以看到对于固定对象调用虚函数,调用是直接写死在汇编代码中的,被称为静态绑定。
如果使用父类的指针调用虚函数,具体调用哪个函数是动态绑定,也就是运行代码时才知道的。

C++ 虚函数个人理解相关推荐

  1. C++中虚函数的理解,以及简单继承情况下的虚函数的表!

    面向对象的三大特征=封装性+继承性+多态性 封装=将客观事物抽象成类,每个类对自身的数据和方法实行权限的控制 继承=实现继承+可视继承+接口继承 多态=将父类对象设置成为和一个或者更多它的子对象相等的 ...

  2. c 语言中虚方法有什么作用是什么,虚函数的作用?

    定义 定义:在某基类中声明为 virtual 并在一个或多个派生类中被重新定 义的成员函数[1] 语法:virtual 函数返回类型 函数名(参数表) {函数体;} 用途:实现多态性,通过指向派生类的 ...

  3. C++构造函数、虚函数

    一:构造函数 基本构造函数: 执行过程:1)传参   2)给类数据成员开辟空间     3)执行冒号语法给数据成员初始化    4)执行构造函数括号里面的内容 例如: class Base{ publ ...

  4. C++多态中虚函数的深入理解

    c++中动态多态性是通过虚函数来实现的.静态多态性是通过函数的重载来实现的,在程序运行前的一种早绑定,动态多态性则是程序运行过程中的一种后绑定.根据下面的例子进行说明. #include <io ...

  5. 深入浅出理解c++虚函数

    深入浅出理解c++虚函数 记得几个月前看过C++虚函数的问题,当时其实就看懂了,最近笔试中遇到了虚函数竟然不太确定,所以还是理解的不深刻,所以想通过这篇文章来巩固下. 装逼一刻: 最近,本人思想发生了 ...

  6. C++深入理解虚函数

    c++深入理解虚函数 虚函数的使用方法: (1)在基类用virtual声明成员函数为虚函数.这样就可以在派生类中重新定义此函数,为它赋予新的功能,并能方便被调用. 在类外定义虚函数时,不必在定义vir ...

  7. C++虚函数---我的理解

    先了解一些基础知识 1.构造函数和析构函数一般是公有成员,否则该类不能实例化 2.类成员默认访问权限是private类型(strcut默认访问权限是public) 3.析构函数一般是虚函数,否则可能会 ...

  8. 重新学习c++--理解引用、智能指针、虚函数、模板、容器

    最近几年用c和python比较多,上次用c++写程序已经是几年前的事情了.温故而知新,是时候重新学习下c++了. C++可以分成四大块去理解: C c++仍以C为基础,区块blocks.语句state ...

  9. 理解虚基类、虚函数与纯虚函数的概念

    引言 一直以来都没有写过一篇关于概念性的文章,因为我觉得这些概念性的东西书本上都有并且说的也很详细写来也无用,今天突发奇想想写 一写,下面就和大家讨论一下虚基类.虚函数与纯虚函数,一看名字就让人很容易 ...

最新文章

  1. nginx实现ip端口转发_Nginx实现端口转发
  2. UVA572 Oil Deposits DFS求解
  3. 【10.29周一电商,已好】中国日历的至高境界,377张震撼级插画,美到爆!
  4. php实现excel单元格合并,字体加粗居中等操作
  5. 【转】Linux下的多线程编程背景知识
  6. linux-redis
  7. FreeSpan 和 PrefixSpan 算法学习
  8. 了解 SWFObject 2.0 应用
  9. iphone双重认证关闭不了怎么办_iPhone如何关闭Apple ID的双重认证
  10. 如何使用Excel绘制图表?
  11. HTML编程(网页的基本标签)
  12. git入门-----初始化命令(init、clone),Basic Snapshotting(add、status、commit、diff、reset、stash)
  13. excel怎么启用宏_怎么使用Excel制作条形码?操作如此简单
  14. [渝粤教育] 广东-国家-开放大学 21秋期末考试马克思主义基本原理概论(A)10882k1
  15. 微信中无法直接下载秒借类金融贷款APP的解决方案
  16. UOS其他分区及移动硬盘带锁问题处理
  17. 娄底环宇中等职业技术学校
  18. 输入相应的数打印三角形
  19. arm linux运行安卓app,Android x86 下运行纯ARM版APP
  20. jmeter beanshell脚本使用

热门文章

  1. Nat. Rev. Neurol. | 机器学习在神经退行性疾病诊断和治疗中的应用
  2. linux setup 进步了网卡,linux 网卡修改小结
  3. java二个整数相减_Java-消息框显示两整数加减乘除
  4. 类型数据合并去重 mysql_MySQL基础知识 数据类型和数据表管理
  5. 如何在内嵌 css 中编写: hover_优秀 CSS 代码的 8 个编写技巧!
  6. vue component created没有触发_Vue的难点解析
  7. R语言绘制堆叠条形图
  8. 西湖大学鞠峰组:环境宏病毒组学分析思路与常用工具
  9. 免费申领Bio-protocol单细胞研究实验方法精选集
  10. MPB:湖南师大尹佳组-​乳酸菌益生菌表面粘附能力的检测