类型转换运算符是类的一种特殊成员函数,它负责将一个类类型的值转换成其他类型。
graph LR
类类型--> 类型转换函数 --> 其他类型
类型转换函数的一般形式如下所示:
operator type()const;//类型转换运算符通常不会改变转换对象的内容,所以它一般被定义成 const 类型
其中type
表示某种类型。类型转换运算符可以面向任意类型(除了void
之外)进行定义,只要该类型能作为函数的赶回类型。因此我们不允许转换成数组或者函数类型,但是允许转换成指针(包括数组指针及函数指针)或者引用类型。
类型转换运算符既没有显式的返回类型,也没有形参,而且必须定义成类的成员函数。
例如:
class AB{
int x;
char y;
public:
AB(int a, char b):x(a), y(b){}
operator char(){
return y;
}
operator int(){
return x;
}
}
AB tmp(1, 1.2);
ans=1+tmp; //ans将会被赋值为2,这里会把tmp转换成int类型,也就是调用了operator int()函数。
转换构造函数是把其他的类型转换为该构造函数所在的类类型。
graph LR
其他类型 --> 转换构造函数 -->类类型
转换构造函数的形式一般如下:
类型名(其他类型名 变量名);
class AB{
int x;
char y;
public:
AB(int a):x(a){//这个是构造函数,不是转换构造函数,因为转换构造函数没有成员初始化列表
y='y';
}
AB(int n){ //这个是转换构造函数
x=n;
y='y';
}
}
AB tmp=2;//这里就会调用转换构造函数
原文:https://www.cnblogs.com/alking1001/p/12003420.html