再谈类成员虚函数

简介: 以前经常学习虑函数 最多的是当基类指针构造子类对象时,调用函数的应用,但是以前没这一点:子类对象调用基类成员函数A,然后基类成员函数又会调用一个类成员函数B,这个类成员函数B在子类中也定义,基类中也定义(基类和子类同时拥有)。

以前经常学习虑函数 最多的是当基类指针构造子类对象时,调用函数的应用,但是以前没这一点:

子类对象调用基类成员函数A,然后基类成员函数又会调用一个类成员函数B,这个类成员函数B在子类中也定义,基类中也定义(基类和子类同时拥有)。此时成员函数A内部是调用基类的成员函数B还是子类的成员函数B呢。

答案是:当基类的这个成员函数声明为virtual时,不管怎样,只有子类有此函数,优先调用子类的。否则,调用基类的

如下图所示

类成员

相关文章
|
4月前
|
C++
面试题:基类的析构函数为何要声明为虚函数?
面试题:基类的析构函数为何要声明为虚函数?
32 0
|
4月前
|
数据安全/隐私保护 C++
C++中的虚函数、纯虚函数与函数重写的技术性探讨
C++中的虚函数、纯虚函数与函数重写的技术性探讨
61 0
|
4月前
|
C++
C++|多态性与虚函数(2)|虚析构函数|重载函数|纯虚函数|抽象类
C++|多态性与虚函数(2)|虚析构函数|重载函数|纯虚函数|抽象类
|
存储 编译器 C++
<c++>虚函数与多态 | 虚函数与纯虚函数 | 多态的实现原理 | 虚析构函数
<c++>虚函数与多态 | 虚函数与纯虚函数 | 多态的实现原理 | 虚析构函数
129 0
|
4月前
|
存储 C++
第十一章 C++成员函数与静态成员详解
第十一章 C++成员函数与静态成员详解
34 0
C++学习之-析构函数必须为虚函数吗?
今天讨论个比较有意思的话题:析构函数是不是必须要为虚函数? 先说答案: 析构函数可以是虚函数,也可以不是虚函数。
|
存储 编译器 C++
【C++要笑着学】虚函数表(VBTL) | 观察虚表指针 | 运行时决议与编译时决议 | 动态绑定与静态绑定 | 静态多态与动态多态 | 单继承与多继承关系的虚表(二)
虚表是编译器的实现,而非C++的语言标准。上一章我们学习了多态的概念,本章我们深入探讨一下多态的原理。文章开头先说虚表指针,观察编译器的查表行为。首次观察我们先从监视窗口观察美化后的虚表 _vfptr,再透过内存窗口观察真实的 _vfptr。我们还会探讨为什么对象也能切片却不能实现多态的问题。对于虚表到底存在哪?我们会带着大家通过一些打印虚表的方式进行比对!铺垫完虚表的知识后,会讲解运行时决议与编译时决议,穿插动静态的知识点。文章的最后我们会探讨单继承与多继承的虚表,多继承中的虚表神奇的切片指针偏移问题,这块难度较大,后续我们会考虑专门讲解一下,顺带着把钻石虚拟继承给讲了
348 1
【C++要笑着学】虚函数表(VBTL) | 观察虚表指针 | 运行时决议与编译时决议 | 动态绑定与静态绑定 | 静态多态与动态多态 | 单继承与多继承关系的虚表(二)
|
编译器 C++
C++类和对象终章——友元函数 | 友元类 | 内部类 | 匿名对象 | 关于拷贝对象时一些编译器优化
C++类和对象终章——友元函数 | 友元类 | 内部类 | 匿名对象 | 关于拷贝对象时一些编译器优化
124 0
|
安全 编译器 C语言
【七、多态】动/静态联编、虚析构函数、虚函数(虚函数表与VPTR指针)、重写与重定义
【七、多态】动/静态联编、虚析构函数、虚函数(虚函数表与VPTR指针)、重写与重定义
191 0
【七、多态】动/静态联编、虚析构函数、虚函数(虚函数表与VPTR指针)、重写与重定义
|
存储 设计模式 安全
如何理解子类对象赋值给父类(深入理解动态绑定、静态绑定)
如何理解子类对象赋值给父类(深入理解动态绑定、静态绑定)
如何理解子类对象赋值给父类(深入理解动态绑定、静态绑定)