048day(类型转换构造函数和析构函数的学习)

来源:互联网 发布:咫尺网络应用号 编辑:程序博客网 时间:2024/05/29 13:48

172210704111-陈国佳总结《2017年11月27日》【连续048天】

标题: 类型转换构造函数和析构函数的学习;

内容:A.类型转换函数的目的是实现类型的自动转换;

只有一个参数,且不是复制构造函数的构造函数;

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

class Complex {
public:
double real,imag;
Complex(int i){ //类型转换构造函数
cout<<"TntConstructor 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;
return 0; 
}

           

有两个字符串的原因是Complex c2=12;和c1=9;都调用了类型转换构造函数;

B.析构函数:

名字与类名相同,在前面加‘~’,没有参数和返回值,一个类最多只能有一个析构函数;

当对象消亡时,析构函数即被调用;

定义类时没写析构函数,则编译器生成缺省析构函数,它什么也不做;

如果定义了析构函数,则编译器不生成缺省析构函数;

如:

class String{
private :
char*p;
public:
String (){
p=new char[10];
}
~ String ();
};
String ::String()
{
delete []p;
}

此析构函数可以在对象消亡的时候,释放分配的空间;

析构函数与数组:

对象数组生命期结束时,对象数组的每个元素的析构函数都会被调用;

析构函数和运算符delete:

delete 运算导致析构函数调用;

析构函数在对象作为函数返回值返回后被调用:

class CMyclass{
public:
~CMyclass(){cout<<"destructor"<<endl;
}
};
CMyclass obj;
CMyclass fun(CMyclass sobj){
return sobj;   //参数对象消亡时也会调用析构函数,函数调用返回时生成临时对象返回
}

int main()
{
obj =fun(obj);
return 0;
}


分析:调用fun后,形参消亡,生成第一个,并返回一个临时对象,当对obj赋值时,临时对象消亡,生产第二个,main函数结束,obj消亡,生成第三个;

  C.最近试了几道算法题,写的头疼,以后要多练练了;

明日计划:构造函数析构函数调用时机;

阅读全文
0 0
原创粉丝点击