《深度探索C++对象模型》学习笔记 — Function语义学(The Semantics of Function)

一、Member的各种调用方式

1、非静态成员函数

非静态成员函数将会被转化为非成员函数,其步骤如下:
(1)改写函数签名,在第一个参数的位置插入一个this指针。
(2)修改调用方式,将 ->. 操作符的调用,改为对象地址的调用。
(3)使用name mangling为每个函数设置一个独一无二的签名。签名中应当包括:类名(为了区分继承中的函数重载),参数名,参数的引用和const标识等等

2、虚函数

虚函数的调用我们需要注意使用域作用符调用函数会抑制虚函数机制,这可以帮助我们提高效率:

#include "time.h"
#include <iostream>
using namespace std;

class CLS_Base
{
   
public:
	int m_iMem1;
	virtual void test() 
	{
   
		m_iMem1++;
	}
};

class CLS_Derived : virtual public CLS_Base
{
   
public:
	virtual void test()
	{
   
		m_iMem1++;
	}

	virtual void testNoneVirtual()
	{
   
		CLS_Derived::test();
	}

	virtual void testVirtual() 
	{
   
		test();
	}
};


int main()
{
   
	CLS_Derived *pDerived = new CLS_Derived;

	time_t tStart = clock();
	for (int i = 0; i < 1000000000; i++)
	{
   
		pDerived->testVirtual();
	}
	time_t tEnd = clock();
	cout << "time = " << (tEnd - tStart) << endl;

	tStart = clock
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值