C++基础知识(七)--构造函数与析构函数--含成员对象的构造函数与析构函数

一、构造函数与析构函数

  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.含有成员对象的析构函数

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

 

posted @ 2019-01-11 16:47  long_ago  阅读(1690)  评论(0编辑  收藏  举报