简述C++中虚拟函数的内存分配机制

所属分类: 软件编程 / C 语言 阅读数: 78
收藏 0 赞 0 分享

因为虚拟函数的地址翻译取决于对象的内存地址,而不取决于数据类型(编译器对函数

调用的合法性检查取决于数据类型)。原来,如果类中定义了虚拟函数,该类及其派生类

就要生成一张虚函数表,即vtable。而在类的对象地址空间中存储一个该虚函数表的入口,

占4个字节,这个入口地址是在构造对象是由编译器写入的。

有如下C++程序:

//#include<stdio.h>

#include<iostream>
using namespace std;

class CMem	
{
	
public:
 CMem(){}
public:
 int m_first;
private:
 unsigned char m_second;
 
public :
 void fun1();
 virtual int funOver(){return 1;}
 
};



class CMemSub : public CMem
{

public:
 CMemSub(){}

public:
 int m_three;

private:
 int m_four;
 
public:
 void fun3();
 virtual int funOver(){return 2;}

virtual int fun4(){return 3;}


};


int main()
{ 
 CMem a,*pMem;
 CMemSub b;
  pMem = &a;
 printf("%d/n",pMem->funOver());
 
  pMem = &b;
  printf("%d/n",pMem->funOver());

 
	
	return 0;
}

程序运行结果为:

1

2

这里涉及到虚函数的工作机制,由于对象的内存空间中包含了虚函数表的入口,

编译器能够由这个入口找到适当的虚函数,这个函数的地址不再由数据类型决定了。

语句pMem = &b;使pMem指向对象b的内存空间,调用pMem->funOver()时,

编译器得到了对象b的vtable入口,并由这个入口找到了CMemSub::funOver()虚函数地址。到此,虚函数的秘密终于大白于天下了。虚函数是C++语法的重点和难点。

以上就是简述C++中虚拟函数的内存分配机制的详细内容,更多关于c++虚拟函数的资料请关注脚本之家其它相关文章!

更多精彩内容其他人还在看

C语言数组入门之数组的声明与二维数组的模拟

这篇文章主要介绍了C语言数组入门之数组的声明与二维数组的模拟,数组学习的同时也要相应理解C语言指针的作用,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言中变量与其内存地址对应的入门知识简单讲解

这篇文章主要介绍了C语言中变量与其内存地址对应的入门知识简单讲解,同时这也是掌握指针部分知识的基础,需要的朋友可以参考下
收藏 0 赞 0 分享

讲解C语言编程中指针赋值的入门实例

这篇文章主要介绍了讲解C语言编程中指针赋值的入门实例,通过const int i与int *const pi这样两个例子来分析指针的赋值和地址指向,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言中的结构体的入门学习教程

这篇文章主要介绍了C语言中的结构体的入门学习教程,以struct语句定义的结构体是C语言编程中的重要基础,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言编程入门之程序头文件的简要解析

这篇文章主要介绍了C语言编程入门之程序头文件的简要解析,包括头文件重复包含问题等方面的说明,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言编程中的联合体union入门学习教程

这篇文章主要介绍了C语言编程中的联合体union入门学习教程,也是C语言入门学习中的基础知识,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言中数组作为函数的参数以及返回值的使用简单入门

这篇文章主要介绍了C语言中数组作为函数的参数以及返回值的使用简单入门,这里以一维数组作为基本条件进行例子讲解,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL的内存表的基础学习教程

这篇文章主要介绍了MySQL的内存表的基础学习教程,包括内存表的创建以及使用限制等等,需要的朋友可以参考下
收藏 0 赞 0 分享

C++中头文件的概念与基本编写方法

这篇文章主要介绍了C++中头文件的概念与基本编写方法,是C++入门学习中的基础知识,需要的朋友可以参考下
收藏 0 赞 0 分享

jQuery移动页面开发中主题按钮的设计示例

这篇文章主要介绍了jQuery移动页面开发中主题按钮的设计示例,jQuery是当今最具人气的JavaScript开发类库,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多