C++重载转型操作符
- C++重载转型操作符
- reference
C++重载转型操作符
前面我们已经介绍过转型构造函数,转型构造函数可以将其它类型的参数转换为类类型。如果我们要进行相反的转换过程,将类类型转换为其它数据类型,则需重载转型操作符
转型操作符重载函数的声明语法如下:
operator 类型名 ();
转型操作符重载函数有几点需要注意的:
1.函数没有返回类型;
2.虽然没有返回类型但是函数体中必须有return语句,其返回类型是由类型名来指定的;
3.转型操作符重载函数只能以类的成员函数的形式进行重载,而不能以友元函数或顶层函数的形式进行重载。
#include
using namespace std;class clock
{
public:clock(){hour = min = ap = 0;}clock(int h, int m, int ap);operator int();
private:int hour;int min;int ap;
};clock::clock(int h, int m, int ap)
{hour = h;min = m;this->ap = ap;
}
clock::operator int()
{int time = hour;if(time == 12)time = 0;if(ap == 1)time += 12;time *= 100;time += min;return time;
}int main()
{clock c(5,7,1);int time &#61; c;cout<<time<<endl;return 0;
}
在本例中我们重载了一个 clock 时钟类&#xff0c;类中声明了一个转型操作符重载函数&#xff0c;该函数可以将类类型的时间转换为一个整形&#xff0c;转换后的整数是军事时间。
在主函数中&#xff0c;我们定义了一个 clock 类的对象 c&#xff0c;之后将其赋给一个整形变量 time&#xff0c;因为我们定义了转型操作符重载函数&#xff0c;因此这一句话并没有出现语法错误。
转型操作符重载可以给程序带来一定的方便&#xff0c;但是建议还是谨慎使用。因为系统通常在需要的时候就会调用转型操作符重载函数&#xff0c;该函数的调用时隐式的&#xff0c;有时候会给程序带来一些意想不到的问题。
reference
C&#43;&#43;重载转型操作符