设计构造函数和析构函数的原因:
在说这个原因之前,先说一下普通方案的初始化的原理,在普通方案中,先创建一个对象,然后这个对象去调用一个普通函数init()去进行初始化工作。这种普通方案存在两个缺点,第一个是每次创建一个对象,都需要显示的去调用一个函数去进行初始化,麻烦,如果由于失误,而忘记去调用这个初始化的函数,这个时候可能就会出现致命性的错误,因为没有初始化的对象真的很危险。第二,其不能解决所有的问题,比如,Test a[1021]={t1,t2..,,}这么多对象,难道要一个个的依次去显示的调用这个普通init函数么。而如果用构造函数,则完全没有这些问题,把所有的初始化和结束工作分别放在构造函数和析构函数中,就可以解决这些问题。具体的看如下代码:
#include <iostream>
using namespace std;
class Test3
{
public:
void init(int _a, int _b)
{
a = _a;
b = _b;
}
protected:
private:
int a;
int b;
};
void main31()
{
//类没有提供构造函数,c++编译器会自动给你提供一个默认的构造函数
//类没有提供构造函数 copy构造构造函数, c++编译器会自动给程序员提供一个 默认的copy构造函数 =
Test3 t1;
int a = 10;
int b = 20;
t1.init(a, b);
Test3 tArray[3];
tArray[0].init(1, 2);
tArray[1].init(1, 2);
tArray[2].init(1, 2);
//
Test3 t21; t21.init(1, 2);
Test3 t22; t22.init(1, 2);
Test3 t23; t23.init(1, 2);
//在这种场景之下 显示的初始化方案 显得很蹩脚
Test3 tArray2[3] = {t21, t22, t23};
//在这种场景之下,满足不了,编程需要
Test3 tArray3[1999] = {t21, t22, t23};
cout<<"hello..."<<endl;
system("pause");
return ;
}