【问题标题】:Setting the private data within main function在 main 函数中设置私有数据
【发布时间】:2020-01-12 22:43:03
【问题描述】:

我尝试在主函数中更新私有数据。它适用于一个私有变量。但对多个变量的工作方式不同。

#include <iostream>
using namespace std;

class A {
    private:
    char data;
    int f;
    public:
    A(){
        data = 'a';
        f = 0;
    }
    char getdata(){
        return data;
    }
    int getf(){
        return f;
    }
};

int main()
{
    A k;
    char *p = (char*)&k;
    *p = '0';
    int* j = (int*)&k;
    *j = 100;
    cout<< k.getdata()<<endl;
    cout<<k.getf();
    return 0;
}

我希望输出为0\n100。但它给了d\n0

【问题讨论】:

  • 这不是UB吗?您假设 C++ 类的内存布局。
  • 你为什么要让你的生活变得艰难?只需提供访问器(getter setter - 最佳解决方案)和/或为各自的构造函数提供参数,xor 只需将所有内容公开。
  • 为什么你认为&amp;k 是两个成员的位置? (作为旁注,这是完全未定义的,你不能期望它有什么特别的。)
  • Marek R 我知道,兄弟!但我想改变主要功能,这就是问题的主要目标..

标签: c++ c++14 private public


【解决方案1】:

由于我对两者使用相同的地址,我无法更改。所以,我在推荐地址 k 中添加了 char 的大小,即 &(k)+sizeof(char) 我通过这一步得到了答案。

【讨论】:

  • 这只是“有效”,因为这段代码中有不止一个错误,它们只是碰巧相互抵消了。
猜你喜欢
  • 2014-04-20
  • 2015-07-24
  • 1970-01-01
  • 2010-10-09
  • 1970-01-01
  • 2012-11-16
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
相关资源
最近更新 更多