在C++中,结构体和类都具有构造函数、析构函数和成员函数,两者只有一个区別:结构体的访问控制默认为public,而类的默认访问控制是private。对于C++中的结构体而言, public, private、protected的访问控制都是在编译期进行检査,当越权访问时,编译过程中会检査出此类错误并给予提示。编译成功后,程序在执行的过程中不会在访问控制方面做任 何检査和限制。因此,在反汇编中,C++中的结构体与类没有分别,两者的原理相同,只是类型名称不同,本章使用的示例多为类。
#对象的内存布局
结构体和类都是抽象的,在真实世界中它们只可以表示某个群体,无法确定这个群体中的某个独立个体,而对象这是群体中独立存在的个体。例如,地球上最智慧的群体生物是人,人便是抽象事物,可以看做是一个类。“人”只能描述这个类型的事物具有哪些特征, 而无法得知具体是哪一个人。而在“人”这个类中,如关羽、张飞等都是独立存在的实体, 可被看做是“人”这个类中的实体对象。
由于类是抽象概念.当两个类的特征相同时,它们之间应该是相等的关系。而对象是实际存在的,即使它们之间所包含的数据相同.也不能视为同一个对象,这就如同人类中的两个实体对象,即使他们是一对双胞胎,也不能因为他们的相貌等各方面的特征都相同就将他们描述成同一个人。下面我们将通过一个简单的示例来加深理解类与对 象之间的关系。