三,怎样使用类和对象
1,利用构造函数对对象进行初始化
对象的初始化
不能在类声明中对数据成员初始化,因为类并非实体而是抽象类型。
如果一个类中所有成员都是公用的,则可以在定义对象时对数据成员进行初始化。
class Time
{public:
hour;
};
Time t1 = {10}; //将t1初始化为10
这种情况和结构化初始变量类似,但如果类中数据成员有private或者protected,就不能使用该方法。
2,构造函数
构造函数(constructor)是一种特殊的成员函数,在建立对象时自动执行,不能被用户调用。
可以在创建对象时为对象的成员属性赋值。
构造函数的名字必须与类名相同,不具有任何类型,不返回任何值。
class Time
{public:
Time() //构造成员函数
{hour = 0;}
};
Time t1 = {10};
带参数的构造函数
构造函数首部一般格式:
构造函数名(类型1 形参1,类型2 形参2,…)
实参是在定义对象时给出的。定义对象一般格式为:
类名 对象名 (实参1,实参2,…)
用参数初始化表对数据成员初始化
类名 :: 构造函数名([参数表]): 成员初始化表
{
构造函数体
}
构造函数的重载
在一个类中可以定义多个构造函数,以便为对象提供不同的初始化方法。这些构造具有相同的名字,而参数的个数或类型不同,这称为构造函数的重载。
3,析构函数
析构函数(destructor)是一个特殊的成员函数,作用与构造函数相反,其作用为撤销对象占用的内存之前完成一些清理工作,使这部分内存可以重新分配。
析构函数不返回任何值,没有函数类型,没有函数参数(故不能被重载)。
执行析构函数的情况:
1,在函数中定义了一个对象,函数调用结束,对象该被释放,释放前自动执行析构函数。
2,静态(static)局部对象在函数调用结束时对象并不释放,此时不调用。只在main函数结束或调用exit函数结束程序时,才调用static局部对象的析构函数。
3,定义了一个全局对象,在程序的流程离开其定义域时,调用该全局变量的析构函数。
3,new运算符动态地建立一个对象,当用delete运算符释放该对象时,先调用该对象的析构函数。
调用构造函数和析构函数的顺序
先构造的后析构。
4,对象指针
指向对象的指针
一个对象存储空间的地址就是对象的指针,其定义如下:
类名 *对象指针名
指向对象成员的指针
存放对象成员地址的指针变量就是指向成员的指针变量。
指向对象数据成员的指针
数据类型名 *指针变量名
指向公用成员函数的指针变量
数据类型名(