C++ 在C+中访问类的私有成员+;

C++ 在C+中访问类的私有成员+;,c++,class,pointers,C++,Class,Pointers,我有以下代码可以访问和更改类外的私有成员 #include<iostream> #include<conio.h> using namespace std; class Test { private: int data; public: Test() { data = 0; } int getData() { return data; } }; int main() { Test t; int* ptr = (int*)&

我有以下代码可以访问和更改类外的私有成员

#include<iostream>
#include<conio.h>
using namespace std;

class Test
{
private:
    int data;
public:
    Test() { data = 0; }
    int getData() { return data; }
};

int main()
{
    Test t;
    int* ptr = (int*)&t;
    *ptr = 10;
    cout << t.getData();
    getch();
    return 0;
} 
#包括
#包括
使用名称空间std;
课堂测试
{
私人:
int数据;
公众:
Test(){data=0;}
int getData(){return data;}
};
int main()
{
试验t;
int*ptr=(int*)&t;
*ptr=10;

CUT< P> <强>因为C++保护意外,而不是故意规避(欺诈)< /强>。 只有硬件可以防止恶意使用通用语言,即使在现实系统中也很难做到这一点


Bjarne Stroustrup在他的《C++程序设计语言》一书中提到了

< P>简短的回答:它不起作用。
为什么“有效”?


对象的大小为4字节(
cout Casting是一种告诉编译器“我要做一些愚蠢的事情,别担心”这是不被鼓励的……在11之前,这是UBSO在等待之前几乎要等到午夜的时候吗?@ OP,C++中,你不能阻止程序员破坏他的程序,如果他真的想要的话,你可以通过拥有一个pIMPL习惯用法,只将你的代码分发到封闭源二进制形式……UB.假设非平凡类型的平凡布局(由于用户提供的构造函数)和使用不兼容的指针类型违反严格别名都是教科书UB。此外,
conio
,LOL。“此类是POD(忽略构造函数)”你不能只是“忽略构造函数”。根据他们的要求,不能有用户定义的构造函数。这个类有。这个类不是POD。而且,通过指向类的指针访问成员违反了严格的别名规则。我可能会发现更多的问题,但为什么要麻烦呢?关于这个代码的所有内容都是UB,应该是UB被火焰喷射而湮没。
int foobar;
int data;