首页 > 编程语言 >C++中的虚函数和虚函数表

C++中的虚函数和虚函数表

时间:2024-04-03 19:36:08浏览次数:25  
标签:函数 指向 virtual C++ 函数指针 Class1

在上面一篇博客中  https://www.cnblogs.com/wphl-27/p/18111083,提到了虚函数,纯虚函数

这篇博客我想继续进一步来说一下虚函数和虚函数表

在C++中,每一个含有虚函数的类,编译器都会为它啊做出一个虚函数表(通常叫做 vtable), 这个虚函数表里面的每个元素都是函数指针,每个元素(函数指针)指向一个虚函数的地址.

除此之外,编译器还会为这种含有虚函数的类,添加上一个成员变量,这个成员变量是一个指向它的虚函数表的指针(通常称为 vptr). 我们来看下面这个例子

 

class Class1  {
public :
    data1;
    data2;
    memfunc();
    virtual vfunc1();
    virtual vfunc2();
    virtual vfunc3();
};

这个Class1 ,它里面包括3个虚函数,我们来看看这个类在内存中空间

我们可以看到,它自动增加了一个成员变量 vptr, 这是一个指针,可以看到它指向的是Class1的虚函数表vtable, 这个虚函数表中有3个元素,是3个函数指针,它们分别指向Class1的三个虚函数的地址

 

标签:函数,指向,virtual,C++,函数指针,Class1
From: https://www.cnblogs.com/wphl-27/p/18113373

相关文章

  • Python函数(一):函数的声明、调用以及参数的使用
    目录为何要用到函数函数的定义和调用函数的参数参数的传递参数的类型 return语句为何要用到函数通常我们编写一段代码是为了实现特定的功能,比如想得到一段数字序列中的最大值、最小值和平均值并输出一个字典,编写一段代码如下:num=[96,85,69,82,52,99,72]m......
  • 浮点数转定点数(自编函数)
    方法:1、计算b=a*2^F,其中F是变量的分数长度,b是用十进制表示的。2、将所得b的值四舍五入到最接近的整数值。3、将(2)所得的b从十进制转换为二进制表示,并命名为新变量c。4、现在,假设c,需要n位来表示二进制中b的值。另一方面,通过模拟得到了W和F的值。所以W的值应该是等于或大于n。如果为......
  • 2、excel的循环查找vloopup函数
    excel的循环查找vloopup函数1、基本语法vloopup(查找值,数据表,显示列,匹配方式)=vloopup(A1,H2:G5,1,0)匹配方式:0为精准匹配,1为模糊匹配2、实例1ABCDE2小米12小红=vloopup(D1,A2:B5,1,0)3小花134小红145小明15=vloopup(D1......
  • 欧拉函数
    一、性质求欧拉函数fromcollectionsimportCounter#证明:容斥原理#f(N)=N*(1-1/p1)*(1-1/p2)*...*(1-1/pn)#与N互质的数的个数:N-N/P1-N/P2-...-N/Pn+N/(p1p2)+...+...-...defcal_euler(x):ans=xcnt=Counter()i=......
  • C++构建工具_bazel
    apollo工具1.DreamView可视化交互工具DreamView是一个web应用程序,提供如下的功能: 可视化显示当前自动驾驶车辆模块的输出信息。例如:规划路径、车辆定位、车架信息等。为使用者提供人机交互接口以监测车辆硬件状态,对模块进行开关操作,启动自动驾驶车辆等。提供......
  • 用c++实现百元买百鸡问题、顺序查找
    5.1.2百元买百鸡问题【问题】已加公鸡5元一只,母鸡3元一只,小鸡1元三只,用100元钱买100只鸡, 问公鸡、母鸡、小鸡各多少只?【想法】 设公鸡、母鸡和小鸡的个数分别为x、y、z,则有如下方程组成立,则百元买百鸡问题转换为求方程组的解。应用蛮力法求力程组的解只能依次试探变量x......
  • C++之STL的algorithm(5)之生成算法(accumulate、fill)整理
    C++之STL的algorithm(5)之生成算法(accumulate、fill)整理注:整理一些突然学到的C++知识,随时mark一下例如:忘记的关键字用法,新关键字,新数据结构C++的遍历算法整理C++之STL的algorithm(5)之生成算法(accumulate、fill)整理一、生成算法1、accumulate累加算法2、fill填充算法......
  • Python语法学习三之函数
    一、简单函数定义和调用def函数名():代码#无参数,无返回值的函数defprintName():print"cehae"printName()#无参数,有返回值的函数defgetAge():return18printgetAge()#有参数,无返回值的函数defprintSex(sex):printsexpr......
  • setrlimit函数限制进程资源
    setrlimit设置参数满足structrlimit{rlim_trlim_cur;//软限制rlim_trlim_max;//硬限制}可以设置的参数:RLIMIT_AS:进程总的可用的存储空间的大小。此外,自动堆栈扩展也将失败(并生成一个SIGSEGV,当没有备用堆栈可用时,它会终止进程)RLIMIT_CORE:核心文件的最大......
  • mysql --聚合函数的学习
    聚合函数1.常见的聚合函数1.1AVG/SUM:只适用于数值类型的字段(或变量)1.2MAX/MIN:适用于数值类型、字符串类型、时间日期类型的字段(或变量)1.3COUNT1.3.1作用:计算指定字段在查询结构中出现的个数(不包含NULL值的)#如果计算表中有......