其实我们已经在C/C++中见到过多次标准类型数据间的转换方式了,这种形式用于在程序中将一种指定的数据转换成另一指定的类型,也即是强制转换,比如:int a = int(1.23),其作用是将1.23转换为整形1。然而对于用户自定义的类类型,编译系统并不知道如何进行转换,所以需要定义专门的函数来告诉编译系统改如何转换,这就是转...
不以说明符explicit声明且可以单个参数调用(C++11 前)的构造函数被称为转换构造函数(converting constructor)。 与只在直接初始化(包括如static_cast这样的显式转换)中被考虑的 explicit 构造函数不同,转换构造函数还作为用户定义的转换序列中的一部分,在复制初始化中受到考虑。
ostream&operator<<(ostream&out,Complex&c){ out<<c.m_real<<" + "<<c.m_imag<<"i";; returnout; } intmain(){ Complexa(10.0,20.0);//向构造函数传递 2 个实参,不使用默认参数 Complexb(89.5);//向构造函数传递 1 个实参,使用 1 ...
return out; } int main(){ Complex a(10.0, 20.0); //向构造函数传递 2 个实参,不使用默认参数 Complex b(89.5); //向构造函数传递 1 个实参,使用 1 个默认参数 Complex c; //不向构造函数传递实参,使用全部默认参数 a = 25.5; //调用转换构造函数(向构造函数传递 1 个实参,使用 1 个默认参数) ...
{}public:friendostream&operator<<(ostream&out,Complex&c);//友元函数private:doublem_real;//实部doublem_imag;//虚部};//重载>>运算符ostream&operator<<(ostream&out,Complex&c){out<<c.m_real<<" + "<<c.m_imag<<"i";;returnout;}intmain(){Complexa(10.0,20.0);a=(Complex)25.5;//错误,...
explicit编译器使用转换构造函数将对象从第一个参数的类型转换为转换构造函数的类的类型。 以下示例对此进行了演示: class Y { int a, b; char* name; public: Y(int i) { }; Y(const char* n, int j = 0) { }; }; void add(Y) { }; ...
complex(constcomplex&c); 转换构造函数: 将其它类型转换为当前类类型时调用,以complex为例,它的原型为: complex(doublereal);// 一个参数 不管哪一种构造函数,都能够用来初始化对象,这是构造函数的本意。假设complex类定义了以上所有的构造函数,那么下面创建对象的方式都是正确的: ...
complex 是 C++ 标准库中的复数类,c是小写的,使用时需要引入complex头文件。Complex 是自定义的复数类,C是大写的,Complex 类尽量模拟 complex 类。 下面是重新编写的 Complex 类,该类只使用了转换构造函数,没有使用类型转换函数,取而代之的是 real() 和 imag() 两个普通成员函数。一个实用的 Complex 类能够...
#include"stdafx.h"classCtest{public://构造函数体外初始化Ctest(inti,intj) :m_NumberA(i),m_NumberB(j){};//构造函数体内初始化Ctest(inti,intj,intk =0) { m_NumberA = i; m_NumberB = j; }protected:private:intm_NumberA;intm_NumberB; ...
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、如果定义了 操作符...