4.4 构造函数和析构函数

由类得到对象需要构造函数, 系统会自动调用相应的构造函数 ;对象使用完后需要释放占有的资源, 系统会自动调用相应的析构函数

构造函数的定义与使用

◆ 1、什么是构造函数
构造函数是特殊的public型成员函数,其特征如下:
  1. 函数名与类名相同。
  2. 构造函数无函数返回类型说明。注意是没有而不是void,即什么也不写,也不可写void!实际上构造函数有返回值,返回的就是构造函数所创建的对象。
  3. 在程序运行时,当新的对象被建立,该对象所属的类的构造函数自动被调用,在该对象生存期中也只调用这一次。
  4. 构造函数可以重载。严格地讲,说明中可以有多个构造函数,它们由不同的参数表区分,系统在自动调用时按一般函数重载的规则选一个执行。
  5. 构造函数可以在类中定义,也可以在类外定义。
  6. 如果类说明中没有给出构造函数,则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之前对象就已经定义,这时要调用构造函数。整个程序结束时调用析构函数。
  • 对于局部定义的对象,每当程序控制流到达该对象定义处时,调用构造函数。当程序控制走出该局部域时,则调用析构函数。
  • 对于静态局部定义的对象,在程序控制首次到达该对象定义处时,调用构造函数。当整个程序结束时调用析构函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值