学习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,结果如下图: