所谓多态,就是指多种形态
C++中虚函数的主要作用就是实现多态,简单说,父类的指针/引用调用重写的虚函数,当父类指针/引用指向父类对象时,调用的是父类的虚函数,指向子类对象调用的是子类的虚函数。
虚函数表
虚函数表(虚表)是通过一块连续内存来存储虚函数的地址,这张表解决了继承,虚函数(重写)的问题。在有虚函数的对象实例中都存在一张虚函数表,虚函数表就像一张地图,指名了实际应该调用的虚函数地址
一 探索虚函数表
为什莫结果是8呢? 因为存了虚表指针 在64位平台下就是12 ,因为64位平台下,指针占8字节
请问func1 ,func2, func3.存在于哪儿?D
A堆 B栈 C数据段 D代码段
二 探索单继承对象模型
首先要明白打印普通函数地址,直接可以用 printf("%p\n",Add)
但是打印成员函数地址,必须加上&符. 即printf("%p\n",&Derive::func1)
我们不能拿监视窗口看,因为内存窗口的地址为函数真实地址,即函数第一句指令地址
但是监视窗口虚表里面存的地址是jmp的地址
因此我们不能拿内存窗口看,应该编写函数打印地址
#include<iostream>
using namespace std;
class Base
{
public:
virtual void func1()
{
cout << "Base::func1" << endl;
}
virtual void func2()
{
cout << "Base::fun