收藏本站 新浪微薄

当前位置:365app官网下载 – 最新官网app下载电脑配件 → 内容

虚函数详细解析

时间::2022-08-04 . 阅读: . 评论:0 . 发表评论

为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(方法:virtualReturnTypeFunction()=0;),则编译器要求在派生类中必须予以重写以实现多态性。

*D的虚函数表中存放的既有继承自B的虚函数B::foo,又有重写(override)了基类虚函数B::bar的D::bar,还有新增的虚函数D::quz。

关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。

所以派生类实际上刻画了一组子类的操作接口的通用语义,这些语义也传给子类,子类可以具体实现这些语义,也可以再将这些语义传给自己的子类。

在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。

同样,在newB的时候,A的构造函数被调用,但是在A的构造函数中,被调用的是A::foo()而不是B::foo。

我们自己编写这样一个例子:include”stdio.h”include”conio.h”classParent用任意版本的VisualC++或BorlandC++编译并运行,输入一个小写字母c,得到下面的结果:Thisisparent,function1Thisischild,function2为什么会有第一行的结果呢?因为我们是用一个Parent类的指针调用函数Fuction1(),虽然实际上这个指针指向的是Child类的对象,但编译器无法知道这一事实(直到运行的时候,程序才可以根据用户的输入判断出指针指向的对象),它只能按照调用Parent类的函数来理解并编译,所以我们看到了第一行的结果。

p=&parent;//这一句,该指针很明显的是指向父类,那么肯定调用的是父类的方法,引用:https://blog.csdn.net/zwe7616175/article/details/81334711https://zhidao.baidu.com/question/123304290.html***>说明:使用虚函数,系统会有一定的空间开销。

这种技术可以让父类的指针有多种形态,这是一种泛型技术。

\\.当一个构造函数被调用时,它做的首要的事情之一是初始化它的VPTR。

当一个类带有虚函数时i编译系统会为该类构造一个虚函数表,它是一个指针数组,用于存放每个虚函数的人口地址。

当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的代码,没有图片,没有详细的说明,没有比较,没有举一反。

这种技术可以让父类的指针有多种形态,这是一种泛型技术。

虚函数最关键的特点是动态联编,它可以在运行时判断指针指向的对象,并自动调用相应的函数。

最新

图片

推荐