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

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

  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次

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

猜你喜欢

转载自blog.csdn.net/qq_31647835/article/details/81175410