C++中指针的类型转换说明

use*_*012 2 c++ encapsulation casting private class

我不明白我在这里提供的代码中提到的两行.为什么我需要使用int*?我如何访问私有变量?我不确定我用这两行做什么.请详细解释.

问题线:

int *p = (int *) &s;  
*p=10;
Run Code Online (Sandbox Code Playgroud)

主要代码:

#include <iostream>

using namespace std;

class sample {
private:
  int a;
public:
  void function () {
    a=5;
  }
  void printA () {
    cout<<"value is "<<a<<endl;
  }
};

int main () {
  sample s;
  s.function();
  s.printA();

  int *p = (int *) &s;
  *p=10;

  s.printA();
}
Run Code Online (Sandbox Code Playgroud)

小智 5

使用(int*)这是一个非常糟糕的主意.您正在使用一个不是int的类作为int.这很糟糕.

你不能访问私人成员,你不应该,这就是他们私有的原因.

int *p = (int *) &s;  
*p=10;
Run Code Online (Sandbox Code Playgroud)

这意味着,您有一个s类型的对象sample,并且它有一个数据成员int a;.你写的是有效的,因为a恰好是在课程的开头.

在某些情况下,类的布局是有保证的,您可以在这里阅读: