gpt4 book ai didi

c++ - 不可能通过指针更改私有(private)数据成员?

转载 作者:太空狗 更新时间:2023-10-29 20:53:28 25 4
gpt4 key购买 nike

我试图通过指针访问一个数据成员,所以我写了这段代码:

#include <iostream>
#include <string>

using namespace std;

class test{
public:
int * returnAdd();
int getA();
void setmember(int x);
private:
int a;
};

int *test::returnAdd()
{
return &a;
}

int test::getA()
{
return a;
}

void test::setmember(int x)
{
a = x;

return;
}

int main(void)
{
test test1;

int *a = test1.returnAdd();
test1.setmember(12);
*a++;
cout << test1.getA() << endl;
cout << *a << endl;

return 0;
}

我希望数据成员 (a) 的值变为 13,但它没有发生。然后我打印了*a的值,我就垃圾了。我想知道为什么数据成员的值没有改变,而 a 指向它的位置?为什么 *a 包含垃圾,甚至没有数据成员 a 的值的拷贝???

最佳答案

由于 operator precedence , 后增量运算符 ++a 被取消引用之前执行。因此,原始表达式 apost increment operator 返回被取消引用。

同时 a 递增以指向下一个不存在的相邻内存。下次您取消引用 a 时将调用未定义的行为。

你可能想要:

(*a)++;

Demo

关于c++ - 不可能通过指针更改私有(private)数据成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42598463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com