#include<iostream>
using namespace std;
class A
{
int value;
public:
A(){value = 1;}
~A(){}
void print(){cout << value << endl;}
};
int main()
{
A a;
int* p = (int*)(&a);
*p = 20;
a.print();//output is 20.
}
这不会破坏课程的封装吗?我是c ++的初学者。我从未见过这种方法可以访问本书中的一个类的私人成员&#34; c ++ primer&#34;。
答案 0 :(得分:2)
这是允许的,因为A
是一个standard_layout类,它是一个与其他语言的布局兼容的类,这意味着它可以传递给用其他语言编写的函数。 C ++。它打破了封装,但这不是你通常想要在C ++领域做的事情,它是兼容性功能。
因为你是初学者,所以你几乎肯定想避免做任何涉及使用c风格演员/ reinterpret_cast
的事情。信任类型系统和访问控制,它们可以帮助您 - 如果您覆盖它们,您需要确切地知道原因,这显然不是这里的情况。
答案 1 :(得分:1)