Bitte überprüfen Sie den untenstehenden Code, ich brauche eine Lösung, um die Änderung von privaten Daten Mitgliedern der Klasse A zu beschränken. Bitte schlagen Sie vor.Wie können Sie die Änderung der privaten Daten von Objekten in C++ einschränken?
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;
}
Hier gibt es kein Problem. Das Programm hat ein undefiniertes Verhalten. –
Sie können nicht einfach Offsets wie diesen für den Zugriff auf eine Membervariable annehmen. Es gibt [Möglichkeiten, die Offsets zu bestimmen] (https://stackoverflow.com/questions/13180842/how-to-calculate-offset-of-a-class-member-at-compile-time), aber Sie können nicht einfach annehmen, a Wert aufgrund von Padding, VTables usw. Siehe auch [hier] (https://StackOverflow.com/questions/12378271/what-does-an-object-look-like-in-memory) – CoryKramer