C++ 虚函数个人总结【初稿】

C++中虚函数的作用主要是为了实现多态,其使用场合多和指针、引用配合实现运行时的动态绑定。

  1. 虚函数表 virtual table

在提出虚函数之前,我想用以下例子引出虚函数表的概念:

#include <iostream>
#include <vector>
using namespace std;

class test{
private:
	int testNum;                             /*comment  1*/
public:
	test(){testNum=0;};
	virtual ~test(){};                       /*comment  2*/

	virtual int tryTest(){                   /*comment  3*/
		return testNum;
	};
};

int main(){
	cout<<sizeof(test)<<endl;
	return 0;
}

当前程序的输出是:8

在comment1,被注释的情况下,程序的输出是:4(1个指针的大小,32位机)

在comment1、comment2和comment3 都被注释掉的情况下,程序的输出是:1(1个字节)

在comment1被注释并只保留comment2或者comment3的情况下,程序的输出还是:4(1个指针)

分析:comment1处的成员变量testNum占有4个字节,大家都知道,但是当虚函数加入的时候,整个class对象占有的字节数就会增大出4个字节,也就是说当类中存在虚函数时,系统会为相关类中的对象保存一份虚函数表,并且这个虚函数表的保存形式是使用指针指向的一块区域。


你可能感兴趣的:(C++)