首先总结一下笨文章的要点:

1、掌握构造函数的概念和使用。

2、掌握动态对象与构造函数的关系。

3、理解缺省构造函数的意义和使用。

4、掌握带参和重载构造函数的定义和使用。

5、理解析构函数的概念和使用。

6、掌握析构函数与数组以及delete的使用。

7、理解对象数据成员的使用。

8、了解构造对象的顺序。

 

4.1 构造函数

   1、构造函数是和类名同名的自动初始化对象的特殊成员函数。

   2、在定义的时候不能指定返回类型。

   3、构造函数可以在类中声明并定义,也可以在类中声明,而在类外定义。

   4、当创建了对象,就会执行构造函数,完成对象的初始化。

   5、定义全局对象则在main()函数之前调用构造函数进行初始化。

例如有一个定义时间的类:

//Clock.h

class Clock

{

    private:

       int  iSecond;

       int  iMinute;

       int  iHour;

   public:

      Clock();   //构造函数

      void PrintTimes();

};

对类的接口进行实现:

//Clock.cpp

#include <iostream>

#include  “Clock.h”

 

using  namespace std;

Clock::Clock()

{

     cout  <&lt;  “Initializing  default ”  &lt;&lt;  endl;

    iSecond  =  0;

    iMinute  =  0;

    iHour  =  0;

}

主函数:

//main.cpp

#include&lt;iostream>

#include  “Clock.h”

 

using  namespace  std;

int  main()

{

   //隐含调用构造函数

  Clock  clockVarA;

clockVarA.PrintTimes();

return  0;

}

 

***构造函数和运算符new

  1、运算符new用于动态建立一个对象,并返回这个对象的指针。

  2、在建立的同时调用构造函数。

  3、在使用完后需要用delete进行内存空间的释放。

 

***缺省构造函数的格式

      Clock::Clock()

       {

        }

当自定义一个构造函数后,系统将调用自定义的构造函数,而不是调用缺省构造函数进行初始化。

全局的对象数组和静态对象数组的缺省构造函数将在main()函数之前调用。

 

4.2  析构函数

1、析构函数名和类名相同,但是要在析构函数名之前加一个波浪号 “~”,以区别构造函数。

2、在定义析构函数时,也不能指定任何返回类型。

3、析构函数不能指定参数,因此类只能有一个析构函数,不能对其进行重载。

4、析构函数在对象的生存期结束的时候被自动的调用。

5、调用析构函数的顺序是和程序调用构造函数的顺序相反的,即先建立的对象最后被析构,后建立的对象先被析构。

定义析构函数实例:

class Person {

private:

char name[20];

int age;

public:

Person(char *_name="None", int _age=0)

{

memset(name, '\0', 20);

strcpy(name,_name);

age = _age;

cout &lt;&lt; "Construction Person: " &lt;&lt; name &lt;&lt; ", " &lt;&lt; age &lt;&lt; endl;

}

~Person()

{

cout &lt;&lt; "Destruction Person: " &lt;&lt; name &lt;&lt; ", " &lt;&lt; age &lt;&lt; endl;

memset(name, '\0', 20);

age = 0;

}

};