C++对象的构造函数和析构函数详解
你好,C++(33)对象生死两茫茫 6.2.3 一个对象的生与死:构造函数和析构函数
6.2.2 使用类创建对象
完成某个类的声明并且定义其成员函数之后,这个类就可以使用了。一个定义完成的类就相当于一种新的数据类型,我们可以用它来定义变量,也就是创建这个类所描述的对象,表示现实世界中的各种实体。比如前面完成了Teacher类的声明和定义,就可以用它来创建一个Teacher类的对象,用它来表示某一位具体的老师。创建类的对象的方式跟定义变量的方式相似,只需要将定义完成的类当作某种数据类型,用之前我们定义变量的方式来定义对象,而定义得到的变量就是这个类的对象。其语法格式如下:
类名 对象名;
其中,类名就是定义好的类的名字,对象名就是要定义的对象的名字,例如:
// 定义一个Teacher类型的对象MrChen,代表陈老师
Teacher MrChen;
这样就得到了一个Teacher类的对象MrChen,它代表学校中具体的某位陈老师。得到类的对象后,就可以通过“.”操作符访问这个类提供的公有成员,包括读写其公有成员变量和调用其公有成员函数,从而访问其属性或者是完成其动作。其语法格式如下:
对象名.公有成员变量;
对象名.公有成员函数;
例如,要让刚才定义的对象MrChen进行“上课”的动作,就可以通过“.”调用它的表示上课行为的成员函数:
// 调用对象所属类的成员函数,表示这位老师开始上课
MrChen.GiveLesson();
这样,该对象就会执行Teacher类中定义的GiveLesson()成员函数,完成上课的具体动作。
除了直接使用对象之外,跟普通的数据类型可以使用相应类型的指针来访问它所指向的数据一样,对于自己定义的类,我们同样可以把它当作数据类型来定义指针,把它指向某个具体的对象,进而通过指针来访问该对象的成员。例如:
// 定义一个可以指向Teacher类型对象的指针pMrChen,初始化为空指针
Teacher* pMrChen = nullptr;
// 用“&”操作符取得MrChen对象的地址赋值给指针pMrChen,
// 也就是将pMrChen指针指向MrChen对象
pMrChen = &MrChen;
这里,我们首先把Teacher类当作数据类型,使用像普通数据类型定义指针一样的形式,定义了一个可以指向Teacher类型对象的指针pMrChen,然后通过“&”操作符取得MrChen对象的地址并赋值给该指针,这样就将该指针指向了MrChen对象。
除了可以使用“&”操作符取得已有对象的地址,并用这个地址对指针进行赋值来将指针指向某个对象之外,还可以使用“new”关键字直接创建一个对象并返回该对象的地址,再用这个地址对指针进行赋值,同样可以创建新的对象并将指针指向这个新的对象。例如:
// 创建一个新的Teacher对象
// 并让pMrChen指针指向这个新对象
Teacher* pMrChen = new Teacher();
这里,“new”关键字会负责完成Teacher对象的创建,并返回这个对象的地址,然后再将这个返回的对象地址赋值给pMrChen指针,这样就同时完成了对象的创建和指针的赋值。
有了指向对象的指针,就可以利用“->”操作符(这个操作符是不是很像一根针?)通过指针访问该对象的成员。例如:
// 通过指针访问对象的成员
pMrChen->GiveLesson();
这里需要特别注意的是,跟普通的变量不同,使用“new”关键字创建的对象无法在其生命周期结束后自动销毁,所以我们必须在对象使用完毕后,用“delete”关键字人为地销毁这个对象,释放其占用的内存。例如:
// 销毁指针所指向的对象