一、构造函数与析构函数

  1.构造函数的作用:初始化对象的数据成员。在类对象被创建时,编译系统为对象分配内存空间,并自动调用构造函数,由构造函数完成成员的初始化操作。

  • 构造函数特征:
  • 函数名与类名相同
  • 构造函数无返回类型说明,什么也不写,也不可写void
  • 在程序运行时,当新的对象被建立,该对象所属的类的构造函数自动被调用,在该对象的生命期内也只调用这一次
  • 构造函数可以重载,即说明中可以有多个构造函数。它们由不同的参数列表区分,系统在自动调用时一般按照函数重载的规则选择一个执行。
  • 构造函数可以在类内定义也可以在类外定义。一般选择在类外定义,可以考虑使用inline内联函数
  • 如果类说明中没有给出构造函数,则C++编译器自动给出一个默认的构造函数

  2.构造函数的调用:

  • 构造函数:
1 CGoods(char*name,int amount,float price)
 2 {
 3 strcpy(Name,name);
 4 Amount=amount;
 5 Price=price;
 6 Total_value=price*amount;
 7 }//CGoods的构造函数
 8 
 9 //构造函数的调用
10 CGoods Car1("夏利200",30,98000.0);
11 调用上边的构造函数,等价于:
12 CGoods Car1=CGoods("夏利200",30,98000.0);

  3.析构函数的作用:当一个对象的生命期结束时,C++会自动调用析构函数对该对象进行善后工作

  • 析构函数的特征:
  • 析构函数名与类名相同,但在前面加上~,如~CGoods()
  • 析构函数无返回值类型,析构函数不带任何参数
  • 一个类有一个且只有一个析构函数,这一构造函数不同。析构函数可以默认。
  • 对象注销时,系统自动调用析构函数。



 二、含有成员对象的构造函数与析构函数

  1.类的成员中,除了成员数据和成员函数外,还有成员对象,即用其他类的对象作为类的对象。使用成员对象的技术成为聚合。成员对象时实体,系统不仅为它分配内存,而且还要进行初始化。

  2.含有对象成员的构造函数:

  • 格式:---------类名::构造函数名(参数总表):对象成员1(参数列表1),对象成员2(参数列表2){......}
  • 含有对象成员的类对象初始化时,首先依次自动调用各成员对象的构造函数,再执行该类对象自己的构造函数的函数体部分。各成员对象的构造函数的调用顺序与类定义中的说明顺序一致,而与它们在构造函数成员初始化列表中的顺序无关。
1 class date
 2 {
 3 int year,month,day;
 4 date(int y,int m,int d)
 5 {
 6 year=y;
 7 month=m;
 8 day=d;
 9 }
10 }
11 
12 class person
13 {
14 char name[12];
15 char sex[4];
16 date bitrhday;
17 public:
18     person(char*,char*,int,int,int);
19 ......  
20 
21 }
22 
23 person::person(char*n,char*s,int y,int m,int d):birthday(y,m,d)
24 {
25 strcpy(name,n);
26 strcpy(sex,n);
27 }

//这里的birthday(y,m,d)不能写成date(y,m,d)

若一个类包含对象成员,在建立该类的对象时,先调用对象成员的构造函数,初始化相应的对象成员,再执行该类的构造函数

  3.含有成员对象的析构函数

因为析构函数没有参数,所以包含成员对象的类的析构函数形式上并无特殊之处。但在撤销该类对象的时候,会首先调用自己的析构函数,再调用成员对象的析构函数,调用次序与初始化时的次序相反。