多态&多态对象模型&虚函数表

本文探讨了C++中的多态概念,强调虚函数在实现多态中的关键作用。通过介绍虚函数表的工作原理,展示了如何在对象实例中查找和调用正确的虚函数。文章还涉及了单继承和多继承对象模型,以及静态和动态联编的概念,最后总结了C++的静态多态和动态多态两种形式。
摘要由CSDN通过智能技术生成

所谓多态,就是指多种形态

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值