C++基础成员函数指针与成员变量指针

// ConsoleApplication19.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "iostream"
using namespace std;
class TC
{
public:
	static int ms_i;
	int m_i;
	int m_ii;
	void normalFunc(int){
		cout << "成员函数" << endl;
	}
	static void  staticFunc(int){
		cout << "属于类的静态函数" << endl;
	}
	virtual void normalVirtualFunc(int){
		cout << "成员虚函数" << endl;
	}

	
protected:
private:
};

void chengYuanHanShuZhiZhen(){
	//--  成员函数指针
	//typedef 
	//void(TC:: * pFunc)(int) = & (TC::staticFunc);  NG
	//-- 定义一个类的 普通成员函数指针变量 的定义 并赋予初值
	void(TC:: * pFunc)(int) = &(TC::normalFunc);
	cout << "void(TC:: * pFunc)(int) = &(TC::normalFunc);" << &pFunc << endl;
	//-- 定义一个类的 虚成员函数指针变量 并赋予初值
	void(TC:: * pFunc2)(int) = &(TC::normalVirtualFunc);
	cout << "void(TC:: * pFunc2)(int) = &(TC::normalFunc);" << &pFunc2 << endl;
	//-- 定义一个类的 静态成员函数指针  并赋予初值
	void(*pFunc3)(int) = &TC::staticFunc;
	pFunc3(2);


	//-- 一个类 成员函数指针变量 的类型重定义
	typedef void(TC:: * pFunc1)(int);
	pFunc1 a = &(TC::normalFunc);
	cout << "a = " << &a << endl;
	pFunc1 v = &TC::normalVirtualFunc;
	cout << "v = " << &v << endl;


	TC tc;
	(tc.*v)(20); //对象tc调用成员函数指针变量v所指向的成员函数。
}
void chengYuanBianLiangZhiZhen(){
	//-- 普通成员变量指针
	//int TC:: * a = &(TC::m_i); NG
	int TC:: * a = &TC::m_i;
	//-- a的首地址是0x00000004, 是该成员变量与该类对象首地址之间的偏移量,因为该类中有一个虚函数,虚函数的存在会伴随着一个虚函数表的存在,虚函数表正好占对象的 前四个字节。
	TC tc;
	//(tc.(*a)) = 8;
	(tc.*a) = 8;

	//-- 静态成员变量
	int * pa = &TC::ms_i;
	//-- pa指向的是一个真正的内存地址(而不是与该类对象 首地址之间的偏移量)
}
 int TC::ms_i = 22;
int _tmain(int argc, _TCHAR* argv[])
{
	chengYuanHanShuZhiZhen();
	chengYuanBianLiangZhiZhen();


	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值