由类得到对象需要构造函数,
系统会自动调用相应的构造函数
;对象使用完后需要释放占有的资源,
系统会自动调用相应的析构函数
。
构造函数是特殊的public型成员函数,其特征如下:
◆ 2、例如,前面声明的商品类,添加以下两个构造函数。
Cgoods (char* name , int amount , float price)
{
strcpy(Name,name);
Amount=amount ;
Price=price ;
Total_value=price*amount ;
}
在实际应用时,也可以只用两个参数:货名和单价,这时构造函数为:
Cgoods (char* name , float price)
{
strcpy(Name,name) ;
Price=price ;
Amount=0 ;
Total_value=0.0 ;
}
这两个构造函数同时被说明,一个是三参数函数,一个是两参数函数。
◆ 3、构造函数的使用
如果定义对象时的格式为:
CGoods Car1(“夏利2000”,30,98000.0) ;
则调用了CGoods中的第一个构造函数,相当于自动调用构造函数:
CGoods(“夏利2000”,30,98000.0) ;
如果定义对象时的格式为:
CGoods Car2(“桑塔那2000”,164000.0) ;
则调用的是第二个构造函数,参数为两个。
定义对象时也可以把构造函数显式表示出来如:
CGoods Car1= CGoods(“夏利2000”,30,98000.0);
还可定义一个构造函数:
CGoods( )
{
Name[0]=‘\0’ ;
Price=0.0 ;
Amount=0 ;
Total_value=0.0 ;
}
用它定义对象:例如:CGoods Car3;
但是用它定义对象时不能加括号。例如: CGoods Car4();则错了 。
当一个对象定义时,C++自动调用构造函数建立该对象并进行初始化,那么当一个对象的生命周期结束时,C++也会自动调用一个函数注销该对象并进行善后工作,这个 特殊的成员函数 即析构函数(destructor):
◆ 2、析构函数的使用
对象用完后,系统会自动调用的,不用烦了。但是,动态对象要记着自己主动释放!
◆ 3、对于不同作用域的对象类型,构造函数和析构函数的调用如下:
构造函数的定义与使用
◆ 1、什么是构造函数构造函数是特殊的public型成员函数,其特征如下:
- 函数名与类名相同。
- 构造函数无函数返回类型说明。注意是没有而不是void,即什么也不写,也不可写void!实际上构造函数有返回值,返回的就是构造函数所创建的对象。
- 在程序运行时,当新的对象被建立,该对象所属的类的构造函数自动被调用,在该对象生存期中也只调用这一次。
- 构造函数可以重载。严格地讲,说明中可以有多个构造函数,它们由不同的参数表区分,系统在自动调用时按一般函数重载的规则选一个执行。
- 构造函数可以在类中定义,也可以在类外定义。
- 如果类说明中没有给出构造函数,则C++编译器自动给出一个缺省的构造函数:类名(void) { }; ,不论自己定义还是C++编译器给出,缺省的构造函数只有一个。
◆ 2、例如,前面声明的商品类,添加以下两个构造函数。
Cgoods (char* name , int amount , float price)
{
strcpy(Name,name);
Amount=amount ;
Price=price ;
Total_value=price*amount ;
}
在实际应用时,也可以只用两个参数:货名和单价,这时构造函数为:
Cgoods (char* name , float price)
{
strcpy(Name,name) ;
Price=price ;
Amount=0 ;
Total_value=0.0 ;
}
这两个构造函数同时被说明,一个是三参数函数,一个是两参数函数。
◆ 3、构造函数的使用
如果定义对象时的格式为:
CGoods Car1(“夏利2000”,30,98000.0) ;
则调用了CGoods中的第一个构造函数,相当于自动调用构造函数:
CGoods(“夏利2000”,30,98000.0) ;
如果定义对象时的格式为:
CGoods Car2(“桑塔那2000”,164000.0) ;
则调用的是第二个构造函数,参数为两个。
定义对象时也可以把构造函数显式表示出来如:
CGoods Car1= CGoods(“夏利2000”,30,98000.0);
还可定义一个构造函数:
CGoods( )
{
Name[0]=‘\0’ ;
Price=0.0 ;
Amount=0 ;
Total_value=0.0 ;
}
用它定义对象:例如:CGoods Car3;
但是用它定义对象时不能加括号。例如: CGoods Car4();则错了 。
析构函数的定义与使用
◆ 1、什么是析构函数当一个对象定义时,C++自动调用构造函数建立该对象并进行初始化,那么当一个对象的生命周期结束时,C++也会自动调用一个函数注销该对象并进行善后工作,这个 特殊的成员函数 即析构函数(destructor):
- 析构函数名也与类名相同,但在前面加上字符‘~’,如~CGoods()。
- 析构函数无函数返回类型,与构造函数在这方面是一样的。但析构函数不带任何参数。
- 一个类有一个也只有一个析构函数,这与构造函数不同。析构函数也可以缺省。
- 对象注销时,系统自动调用析构函数。
◆ 2、析构函数的使用
对象用完后,系统会自动调用的,不用烦了。但是,动态对象要记着自己主动释放!
◆ 3、对于不同作用域的对象类型,构造函数和析构函数的调用如下:
- 对全局定义的对象,当程序进入入口函数main之前对象就已经定义,这时要调用构造函数。整个程序结束时调用析构函数。
- 对于局部定义的对象,每当程序控制流到达该对象定义处时,调用构造函数。当程序控制走出该局部域时,则调用析构函数。
- 对于静态局部定义的对象,在程序控制首次到达该对象定义处时,调用构造函数。当整个程序结束时调用析构函数。