一. 编译器对C++的多态是通过在Class里面插入一个vptr指针,同时生成一个virtual table, 让vptr指向这个virtual table来实现的,那么什么样的Class才有必要设置vptr指针呢?如下图所示:
下面分6种情况讨论
(1)有虚函数的基类
(2) 没有虚函数的基类
(3) 虚继承,基类有vptr
(4)非虚继承,基类没有vptr,派生类没有虚函数
(5)非虚继承,基类没有vptr,派生类有虚函数
(6) 非虚继承,基类有vptr
一. 编译器对C++的多态是通过在Class里面插入一个vptr指针,同时生成一个virtual table, 让vptr指向这个virtual table来实现的,那么什么样的Class才有必要设置vptr指针呢?如下图所示:
下面分6种情况讨论
(1)有虚函数的基类
(2) 没有虚函数的基类
(3) 虚继承,基类有vptr
(4)非虚继承,基类没有vptr,派生类没有虚函数
(5)非虚继承,基类没有vptr,派生类有虚函数
(6) 非虚继承,基类有vptr