C++通过指针修改对象的私有成员

92 阅读1分钟

先上代码

#include <iostream>
using namespace std;

class test1
{
private:
	int val;
public:
	int * changeTest(void)
	{
		return &val;
	}
	void showVal(void)
	{
		cout << val << endl;
	}
};
int main()
{
	test1 t;
	int *p = t.changeTest();
	*p = 10;
	t.showVal();
	system("pause");
	return 0;
}

首先定义了一个类test1,该类包括一个私有属性val以及两个方法。
changeTest()方法用于返回私有属性val的地址。
showVal()方法用于向屏幕输出val属性的值。

主函数中实例化了一个对象 t ,调用changeTest()方法方法返回val的地址,然后为其赋值10。使用showVal()方法打印val的值。

最后输出结果为如下
在这里插入图片描述
C++程序员,除非在不得已的情况下,否则应该尽量减少指针的使用。
首先,使用指针就可能会涉及到内存的管理和释放,容易造成内存泄露或者产生非法内存的指针。
其次,标准库更加方便安全。
最后,指针可能会改变类的安全性。在此例中,封装为私有属性就是为了防止外部修改,但通过指针还是可以修改,这是不安全的。