首先总结一下笨文章的要点:
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 << “Initializing default ” << endl;
iSecond = 0;
iMinute = 0;
iHour = 0;
}
主函数:
//main.cpp
#include<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 << "Construction Person: " << name << ", " << age << endl;
}
~Person()
{
cout << "Destruction Person: " << name << ", " << age << endl;
memset(name, '\0', 20);
age = 0;
}
};