1 基础和示例1
每个包含了虚函数的类都包含一个虚表,类中只要有虚函数,就会有一个虚表来维护。
虚表是属于类的,而不是属于某个具体的对象;同一个类的所有对象都使用同一个虚表。
虚表是一个指针数组,其元素是虚函数的指针,每个元素对应一个虚函数的函数指针;
普通的函数即非虚函数,其调用并不需要经过虚表,虚表的元素并不包括普通函数的函数指针;
虚函数表的地址总是存在于对象实例中最前面的位置,其后依次是对象实例的成员;
我们可以使用对象实例的地址来得到虚函数表的地址,进而获得具体的虚函数的地址,然后进行调用;
#include <iostream>
#include "afxwin.h"
using namespace std;
class Base
{
public:
Base(int mem1 = 101, int mem2 = 202) : m_mem1(mem1), m_mem2(mem2) { ; }
virtual void vfunc1() { std::cout << "In vfunc1(), 1111" << std::endl; }
virtual void vfunc2() { std::cout << "In vfunc2(), 2222