多态(Vptr指针与虚函数表)

 本笔记主要记录运行时多态——虚函数实现。如下,代码可以先略过直接看下面结论。

多态:根据实际的对象类型决定函数调用语句的具体调用目标

typedef void(*VFUNC)(void);
/*
typedef void (*)()     VE;
int   arr[i]     int []*/
void PrintTable(VFUNC table[])//VFUNC * table,数组里面都是指针,以0结束
{
	cout << "虚表指针" << table << endl;
	for (size_t i = 0; table[i] != nullptr; ++i)
	{
		cout << "vatable" << i<<" :   "<< table[i];
		VFUNC vf = table[i];
		vf();

	}
}
//多态使用虚函数表来实现
//虚函数在编译阶段生成,存储在静态区,推荐把基类的析构函数定义为虚函数,
//虚函数表指针是在构造函数初始化列表阶段初始化的

class Base1
{
public:
	virtual void func1() { cout << "我是base1函数1" << endl; }
	virtual void func2() { cout << "我是base1函数2" << endl; }
	int a;

};

class Base2
{
public:
	virtual void func1() { cout << "我是base2函数1" << endl; }
	virtual void func2() { cout << "我是base2函数2" << endl; }
	int a;

};

class Base3
{
public:
	virtual void func1() { cout << "我是base2函数1" << endl; }
	virtual void func2() { cout << "我是base2函数2" << endl; }
	int aaa;

};

class Derive : public Base2,public Base1,public Base3
{
public:
	virtual void f

你可能感兴趣的:(C/C++,多态,虚函数)