程序设计与算法三二单元(类型转换构造函数、析构函数)

类型转换构造函数基本概念:

  1. 定义转换构造函数的目的是实现类型的自动转换。

  2. 只有一个参数,而且不是复制构造函数的构造函数,一般就可以看作是转换构造函数。

    Complex( int i) {//是类型转换构造函数 
        cout << "IntConstructor called" << endl; 
        real = i; imag = 0; } 
    Complex(double r,double i) {//不是类型转换构造函数
        real = r; imag = i; }
    int main () { 
        Complex c1(7,8); 
        Complex c2 = 12; 
        c1 = 9; // 9被自动转换成一个临时Complex对象
        cout << c1.real << "," << c1.imag << endl; //9,0
        return 0; 
    }

     

  3. 当需要的时候,编译系统会自动调用转换构造函数,建立一个无名的临时对象(或临时变量)。

 

析构函数基础概念:

  1. 名字与类名相同,在前面加‘~’, 没有参数和返回值,一个类最多只能有一个析构函数。
  2. 析构函数对象消亡时即自动被调用。可以定义析构函数来在对象消亡前做善后工作,比如释放分配的空间等。
  3. 如果定义类时没写析构函数,则编译器生成缺省析构函数。缺省析构函数什么也不做。
  4. 如果定义了析构函数,则编译器不生成缺省析构函数。
析构函数实例
class String{ 
    private : char * p; 
    public: String () { 
        p = new char[10]; 
    } 
    ~ String () ; 
}; 
String ::~ String() { 
    delete [] p; 
}


注意点:

若new一个对象数组,那么用delete释放时应该写 []。否则只delete一个对象(调用一次析构函数)

静态局部对象在整个mian函数结束后才会消亡

析构函数不负责回收对象所在的存储空间

pTest = new Ctest[3]; //构造函数调用3次 
delete [] pTest; //析构函数调用3次

 

实例:构造函数和析构函数什么时候被调用

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值