《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.最近试了几道算法题,写的头疼,以后要多练练了;
明日计划:构造函数析构函数调用时机;
本文详细介绍了C++中类型转换构造函数的作用与使用场景,包括如何通过构造函数实现不同类型的自动转换。同时,深入解析了析构函数的功能,探讨了其在对象生命周期结束时的调用机制。
688

被折叠的 条评论
为什么被折叠?



