c++知识点---举例说明 转换构造函数 和 类型转换函数


转换构造函数:

基本数据类型(或者对象)    -----转换----->  对象(或另一个对象)


类型转换函数:

对象 ----转换----->   基本数据类型


举例说明:

以Complex复数这个类为例子

class.h

扫描二维码关注公众号,回复: 1021015 查看本文章
class Complex
{
public:
	Complex(double x1, double y1);//普通构造函数
	Complex(double t);//转换构造函数
	operator double();//类型转换函数
	void show();//输出复数
private:
	double real;
	double imag;
};

Complex::Complex(double x1, double y1)
{
	real = x1;
	imag = y1;
}
inline Complex::Complex(double t)
{
	real = t;
	imag = 0;
	cout << this << endl;//输出正在调用的对象的地址
	show();
}
inline Complex::operator double()
{
	cout << "类型转换"<<this << endl;
	return real;
}
inline void Complex::show()
{
	cout << real << ',' << imag << endl;
}



转换构造函数1:

Complex c1(1.1);//将1.1转换为对象c1,所以两个对象地址一样
	Complex* pc1 = &c1;
	cout << pc1 << endl;


转换构造函数2:

Complex c2 = 2.2;//将2.2转换为对象c2,所以两个对象地址一样
	Complex* pc2 = &c2;
	cout << pc2 << endl;


转换构造函数3:

Complex c3(0.0, 0.0);
	c3 = 3.3;//将3.3转换成临时Complex类对象,再进行对象之间的赋值。地址不同
	Complex* pc3 = &c3;
	cout << pc3 << endl;


类型转换函数4:

Complex c1(1.1, 2.2);
	Complex c2(3.3, 4.4);//首先,目前的+不能进行对象之间的加,系统会自动进行转换成
	Complex c3 = double(c1) + c2;//c1进行显式类型转换,c2进行隐式类型转换。c1->1.1,c2->3.3.
	Complex* pc3 = &c3;  //相加就是4.4,再将4.4转换成c3对象
	cout << pc3 << endl;


综合转换:

Complex c5 = 6.6 + Complex(7.7);//6.6不变,7.7->对象->7.7
	Complex* pc5 = &c5;	//再将最后的计算结果直接转换成c5对象
	cout << pc5 << endl;
	cout << "-------------------" << endl;


猜你喜欢

转载自blog.csdn.net/tobe_numberone/article/details/78165348