C++重载转型操作符
前面我们已经介绍过转型构造函数,转型构造函数可以将其它类型的参数转换为类类型。如果我们要进行相反的转换过程,将类类型转换为其它数据类型,则需重载转型操作符。
转型操作符重载函数的声明语法如下:
举个例子:
在主函数中,我们定义了一个 clock 类的对象 c,之后将其赋给一个整形变量 time,因为我们定义了转型操作符重载函数,因此这一句话并没有出现语法错误。
转型操作符重载可以给程序带来一定的方便,但是建议还是谨慎使用。因为系统通常在需要的时候就会调用转型操作符重载函数,该函数的调用时隐式的,有时候会给程序带来一些意想不到的问题。
声明:《C++系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
转型操作符重载函数的声明语法如下:
operator 类型名 ();
转型操作符重载函数有几点需要注意的:- 函数没有返回类型;
- 虽然没有返回类型但是函数体中必须有return语句,其返回类型是由类型名来指定的;
- 转型操作符重载函数只能以类的成员函数的形式进行重载,而不能以友元函数或顶层函数的形式进行重载。
举个例子:
#include <iostream> 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; // 0表示am, 1表示pm }; 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 = c; cout<<time<<endl; return 0; }在本例中我们重载了一个 clock 时钟类,类中声明了一个转型操作符重载函数,该函数可以将类类型的时间转换为一个整形,转换后的整数是军事时间。
在主函数中,我们定义了一个 clock 类的对象 c,之后将其赋给一个整形变量 time,因为我们定义了转型操作符重载函数,因此这一句话并没有出现语法错误。
转型操作符重载可以给程序带来一定的方便,但是建议还是谨慎使用。因为系统通常在需要的时候就会调用转型操作符重载函数,该函数的调用时隐式的,有时候会给程序带来一些意想不到的问题。
声明:《C++系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。