1. 构造函数
1.1 构造函数的定义
数据成员多数是私有的,要对它们进行初始化,必须用一个公有函数来进行,同时这个函数应该在且仅在定义对象时自动执行一次,称为构造函数。
构造函数的用途:
①创建对象
②初始化对象中的属性
③类型转换
1.2 构造函数的使用
构造函数是特殊的公有成员函数(在特殊用途中构造函数的访问限定可以定义成私有或保护),其特征如下:
(1)函数名必须与类名相同;
(2)构造函数无函数返回类型说明;注意是没有而不是void,即就是什么也不写,也不能写void;实际上构造函数有返回值,返回的就是构造函数所创建的对象;
(3)在程序运行时,当新的对象被建立,该对象所属的类构造函数自动被调用,在该对象生存期中也只能调用一次;
(4)构造函数可以重载;严格地讲,类中可以定义多个构造函数,它们由不同的参数表区分,系统在自动调用时按一般函数重载的规则选一个执行;
(5)构造函数可以在类中定义,也可以在类中声明,在类外定义;
(6)如果类说明中没有给出构造函数,则C++编译器自动给出一个缺省的构造函数:
类名(void) { }
但只要我们定义了一个构造函数,系统就不会自动生成缺省的构造函数;只要构造函数是无参的或者只要各参数均有缺省值的,C++编译器都认为是缺省的构造函数,并且缺省的构造函数只能有一个。
如:
class Complex
{
private:
int Real;//实部
int Image;//虚部
public:
Complex() //缺省的构造函数
{
Real = 0;
Image = 0;
cout << "Create Object: Complex()" << endl;
}
Complex(int r, int i)//带参数的构造函数
{
Real = r;
Image = i;
cout << "Create Object: Complex(int ,int)" << endl;
}
void Print()
{
cout << "Real=" << Real << "Image=" << Image << endl;
}
};
int main()
{
Complex ca;
Complex cb(1, 2);
Complex cc = Complex(3, 4);
Complex cd{ 5,6 };;
return 0;
}
运行结果:
注意:Complex ce( );是不可以构造对象的。
2. 析构函数
1.1 析构函数的定义
当定义一个对象时,C++自动调用构造函数建立该对象并进行初始化,那么当一个对象的生命周期结束时,C++也会自动调用一个函数注销该对象并进行善后工作,这个特殊的成员函数即析构函数。
1.2 析构函数的使用
在使用析构函数时,有如下的使用注意:
(1)析构函数名与类名相同,但在前面加上字符“~”,如:~CGoods;
(2)析构函数无函数返回类型,与构造函数在这一方面是一样的,但是析构函数不带任何参数;
(3)一个类有一个也只有一个析构函数,这与构造函数不同,构造函数有很多;
(4)对象注销时,系统自动调用析构函数;
(5)如果类说明中没有给出析构函数,则C++编译器自动给出一个缺省的析构函数。
如:~类型名称( ) { }
示例:
class Complex
{
private:
double Real;//实部
double Image;//虚部
public:
Complex() :Real{}, Image{} //缺省的构造函数
{
cout << "Create Object:" << this << endl;
}
Complex(double r, double i) :Real{ r }, Image{ i }//带参数的构造函数
{
cout << "Create Object: " << this << endl;
}
~Complex()
{
cout << "Destroy Object:" << this << endl;
}
void Print() const //常方法
{
cout << "Real=" << Real << "Image=" << Image << endl;
}
};
其中: