请输入您要查询的百科知识:

 

词条 转换构造函数
释义

在C++中,类的构造函数可以省略不写,这时C++会为它自动创建一个隐式默认构造函数(implicit default constructor);也可以由用户定义带参数的构造函数,构造函数也是一个成员函数,他可以被重载;当一个构造函数只有一个参数,而且该参数又不是本类的const引用时,这种构造函数称为转换构造函数

例如:

class Complex

{

protected:

double real,vir; //复数的实部和虚部

public:

Complex(double x)

{ real=x,vir=0;}

};

这个构造函数即 转换构造函数。

如上文。构造函数只有一个参数 double x,它也不是本类的const引用。

转换构造函数应用

1、转换构造函数一般由系统自动调用(当然代码里自己调用完全没问题),这点很利于编程。

例如:Complex t=5.0;//或Complex t(5.0);或Complex t=Complex(5.0);或Complex t=(Complex)5.0;

这时系统就自动调用了 Complex(double x)将 5.0转换成Complex类,再赋值给 t 。

2、如果定义了 操作符重载函数 Complex operator + (const Copmlex a ,const Complex b);

而且在Complex类中定义了类型转换函数 operator double() {.....; }。

例如类的声明如下:

class Complex

{

public:

Complex(){real=0;vir=0;}//构造函数1

Complex(double r){real=r;vir=0;}//构造函数2/转换构造函数

Complex(double r,double i):real(r),vir(i){}//构造函数3

friend Complex operator + (Complex &c1,Complex &c2);//重载"+"运算符

operator double(){return real;}//类型转换函数

private:

double real; double vir;

};

//还需在类外定义运算符重载函数operator +如下

Complex operator + (Complex &c1,Complex &c2)

{return Complex(c1.real+c2.real; c1.vir+c2.vir);}

这时,语句:

Complex b=t + 4.8;

就能直接编译通过,且4.8和t的位置可互换,即满足加法交换律,但是当编译器编译到这行语句时,不同的编译器会有不同的反应,有的编译环境下,如dev c++会把t转换为double数值,若t=1+1i则执行完此行语句后b=5.8+0i(注意类声明中的类型转换函数),此时对运算符+的重载不起作用;而有的编译器则会自动执行转换构造函数,把4.8转换为一个对象即4.8+0i,再与t相加 执行结果为b=5.8+1i,此时对运算符+的重载起作用,因为在类Complex中将运算符重载函数定义为了友元函数,这个函数需要两个Complex的对象作为参数。

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/1/31 22:37:10