【发布时间】:2016-10-15 02:12:35
【问题描述】:
请检查下面的代码,我需要一个解决方案来限制A类私有数据成员的修改。请提出建议。
class A{
private:
int a;
int b;
public:
A(int i=0, int j=0):a(i),b(j){
cout<<"A's constructor runs"<<endl;
}
void showVal(){
cout<<"a: "<<a<<" b: "<<b<<endl;
}
};
int main(){
A ob1(10,20);
ob1.showVal();
int *ptr = (int*)&ob1;
*(ptr+0)=1;
*(ptr+1)=2;
ob1.showVal();
return 0;
}
【问题讨论】:
-
这里没有问题。该程序具有未定义的行为。
-
你不能只假设这样的偏移量来访问成员变量。有ways to determine the offsets,但由于填充、vtables 等原因,您不能简单地假设一个值。另请参阅here