通过指针得到对象的成员数据

    在C++中,我们访问对象的数据成员,特别是私有数据成员,一般是通过类的结构函数来进行。除此而外,我们可以通过指针来访问。假设有这样一个类:

class Base{
public:
	Base(double a,int b){
		_a = a;
		_b = b;
	};
private:
	double _a;
	int _b;
};

 

对类的一个实例base,我们通过指针来操纵base的数据成员_a,_b步骤如下:

(1)获得对象base在内存中的地址address,方法(&base)

        C++中本身对对象取引用(&base)就是转换成相应的指针,类型为(Base*),如果我们想操纵_a,_b,必须对其进行类型转换。

(2)转换成相应数据成员类型的类型,对double型转换成类型为double*的指针,对int型转换成类型为int*的指针。

(3)通过指针的解引用,获得数据。

如下我们分别取对象base的_a,_b的值

取_a:

(1)得到对象base的的数据成员_a在内存中的地址(&base)

(2)进行类型转换(double*)(&base)

(3)解引用*(double*)(&base)

即得到_a的数据值。如果我们想接着取_b的值:

(1)得到对象base的数据成员_b在内存中的地址((double*)(&base)+1)

(2)进行类型转换(int*)((double*)(&base)+1)

(3)解引用*(int*)((double*)(&base)+1)

完整程序如下:

#include <iostream>
using namespace std;

class Base{
public:
	Base(double a,int b){
		_a = a;
		_b = b;
	};
private:
	double _a;
	int _b;
};

int main()
{
	Base base(20.5,30);
	cout<<"对象base地址:\t"<<(&base)<<endl;
	cout<<"对象base的_a的值:\t"<<(*(double*)(&base))<<endl;
	cout<<"对象base的_b的值:\t"<<(*(int*)((double*)(&base)+1))<<endl;
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值