C++虚函数调用方式

基础:
直接调用在反汇编里 Call的是一个地址 硬编码为E8…。
间接调用在反汇编里是Call [] 硬编码一般为FF …

什么是虚函数?
虚函数就是函数面前加个virtual

观察虚函数的调用方式->
通过创建对象的方式观察虚函数
演示代码

#include <iostream>
using namespace std;

class Base {
public:
	void Function_1() {
		cout << "函数1" << endl;
	}
	virtual void Function_2() {
		cout << "函数2" << endl;
	}


};


int main() {

	Base base;
	base.Function_1();

	base.Function_2();

	return 0;
}

我们在这里下个断点
在这里插入图片描述
跳到反汇编(在VS内直接右键找到转到反汇编即可)
在这里插入图片描述
通过反汇编我们可以看到
通过对象的方式调用在内部虚函数和普通函数是没区别的

通过指针方式观察虚函数
Main函数内代码


int main() {

	Base base;
	Base * PB;
	PB = &base;

	PB->Function_1();
	PB->Function_2();


	return 0;
}

在这里插入图片描述
可以观察到反汇编代码不一样
在这里插入图片描述
通过指针调用虚函数时 他是间接调用
总结:
1.通过对象调用时,virtual函数与普通函数都是E8 Call
2.通过指针调用时,virtual函数是FFCall 也就是间接Call

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值