结果为: AA::fun() BB::fun() C++的多态分为静态多态和动态多态。 静态多态:静态多态就是重载,因为是在编译期决议确定。也就是在编译的时候就能确定函数的地址。 动态多态:是通过继承重写基类的虚函数实现的多态,在运行期间决议确定。也就是编译期间不知道函数的地址,只知道存储函数地址的虚表的地址。 C++中多态的实现就是通过虚函数实现的,虚函数的对象实例中都存在一张虚函数表。
虚函数表是通过一块连续内存来存储虚函数的地址,指明了实际调用的虚函数指针。
class AA{public: virtual void fun1() {} virtual void fun2() {}PRotected: int _a;};void Test2(){ AA a;}通过监视窗口可以看到,对象a的首部存储了一个地址,指向的空间存储了虚函数的地址,称为虚函数表。所以sizeof(a)的值为8。
通过这种方式,可以依次打印出虚表地址以及虚函数的地址,结果如下: 虚表后面的0标志着虚表结束,类似于字符串结束符“/0”。
新闻热点
疑难解答