类型转换构造函数与析构函数

注:以下大部分内容来源于 coursera 课程《C++程序设计》

类型转换构造函数

  1. 目的:实现类型的自动转换。
  2. 特点:只有一个参数;不是复制构造函数;被调用时会建立临时的变量
class Complex{
public:double real,imag;
Complex(int i){ //类型转换构造函数(2)
cout<<"IntConstructor called"<

Complex c2=12; 这个语句对c2进行初始化,在初始化的过程中,调用类型转换构造函数,它是不会去生成一个临时的变量的,而只是把12那个参数传入(2)。
c1 = 9是一个赋值语句,这里注意,赋值后的两边其实是不同类型的。c1 是complex 型,9是整型。在生成这个赋值语句的时候,编译器会调用类型转换构造函数,首先会生成一个临时变量,9被自动转换成一个临时Complex对象,然后将这个complex对象赋值给c1。

析构函数 Destructor

  1. 格式:在类前面加"~"
  2. 作用:在象消亡前做善后处理,例如释放分配的空间等。
    3.对象消亡时,自动被调用。如果没有写,编译器会自动生成缺省析构函数。
class String{
private: char *p;
public: 
String(){
p = new char[10];
}
~String(); 
};
String::~String(){
delete [] p ;
}
  1. 数组:对象数组将生命期结束时,对象数组的每个元素的析构函数都会被调用。
class Ctest{
public:
~Ctest(){cout<<"destructor called"<

定义了一个Ctest类下面的一个对象数组array, 它包含了两个对象。
结束的时候, 我们就要释放相应的对象,会调用两次析构函数。

  1. delete 运算符
    delete 运算导致析构函数调用
Ctest *pTest;
pTest = new Ctest; //构造函数调用
delete pTest;//析构函数调用
pTest = new Ctest[3]; //构造函数调用
delete []pTest;//析构函数调用

定义了一个 Ctest的的一个指针, pTest,那么它指向谁呢?它指向了new出来的一个Ctest,

  1. 比较
构造函数 析构函数
成员函数的一种 成员函数的一种
名字与类型相同 名字与类型相同
可以有参数,不能有返回值 没有参数值和返回值
可以有多个构造函数 一个类最多一个析构函数
可以用来初始化,初始化不同对象需要多个 对对象消亡前做最后的善后处理,一个就足够
  1. 例子
class Demo{
int id;
public:
Demo(int i){
id = i;
cout<<"id = "<< id<<"Constructed"<

最先构造的会最后被消亡掉。

你可能感兴趣的:(类型转换构造函数与析构函数)