学习C++的时候就知道类的私有成员只能通过类的成员函数操作,外部无法访问。今天无聊,就来试试看通过其他方式能不能访问到类的私有成员。
 

using namespace std;
class Person
{
  private:
    int age;
    char name[20];                    
   //为了简单,这里用了char数组,如果用std::string的话情况可能复杂,因为string是一个类。
  public:
    Person(char* aName, int aAge);
    char* getName();
    int getAge();      
};

Person::Person(char* aName, int aAge)
{
  strcpy(name, aName);
  age = aAge;
};

int Person::getAge() 
{
  return age;
};

char* Person::getName()
{
  return name;
};


  现在定义了一个简单的Person类

int main()
{
    Person *p = new Person("huanghongqiao", 30);
    void *p2 = p;
    cout << "name = " << p->getName() << " age = " << p->getAge() << endl;
    printf("age = %d,  name = %s\n", *((int*)p2), ((char*)p2 + 4));
    return 0;
}

  如果p->name 访问私有成员是编译不通过的,这里我通过p2, p2 + 4 这个地址来访问类的私有成员,不知道算不算叫硬编码。我使用的是DEV C++ 4.9,结果如下图:

另类C++访问私有数据_C++