gpt4 book ai didi

c++ - 访问主函数中的私有(private)数据

转载 作者:太空宇宙 更新时间:2023-11-04 15:23:48 26 4
gpt4 key购买 nike

在 main.cpp 中

class vivek
{
int i;
float d;
public:
vivek()
{
i = 4;
d = 4.44;
}
~vivek()
{
cout << "destructor" << i;
}
int get()
{
return i;
}
};

int main()
{
vivek *viku = new vivek;
vivek *p;

p = viku;
cout << (*(int*) (p));
getchar();

return 0;
}

通过上面的代码我可以访问变量 i ,但是我想知道我怎样才能访问变量 d 。

我知道这个概念是不可取的,因为它违反了封装..但我只是想知道我们如何才能做到这一点?

最佳答案

虽然它非常 hacky,但它可能的,因为 vivek 是一个标准布局结构。这意味着您可以这样做:

#include <iostream>

// copied from original
class vivek {
int i;
float d;
public:
vivek() {i = 4; d = 4.44; }
~vivek() { cout<<"destructor"<<i; }
int get() { return i; }
};

struct vivek_sneaky_accessor {
int i;
float d;
};

int main() {
vivek v;
vivek_sneaky_accessor *acc = reinterpret_cast<vivek_sneaky_accessor*>(&v);
std::cout << acc->d;
return 0;
}

这依赖于 [class] 第 7 点和第 8 点(标准布局结构的定义)和 [class.mem] 第 17 点和第 20 点(标准布局结构的布局兼容性)。

免责声明 我绝不提倡这是一件合理的事情。我只是说这实际上是可能的。

关于c++ - 访问主函数中的私有(private)数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13585711/

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