在C 程序编写中,运算符重载是一个重要的工具,其可以通过“重载”实现对运算符的自定义。例如,对于两个不同的类a_class和b_class,默认情况下无法直接对“a_class b”进行运算,但是通过对“ ”运算符的重载,就可以实现该运算,具体定义方式如下:double_vector.h文件:
double_vector.cpp文件:
主程序文件:
计算结果:
实际上,重载运算符就是定义函数名为“operator 运算符”的函数,在使用时如果编译器在程序语句中发现该运算符,就将其等效为调用“operator 运算符”。一般而言,可以重载的运算符可分为单目运算符,如“自增 ”“自减--”“负号-”等;双目运算符,如“加 ”“减-”“大于>”等;三目运算符“b ? x :y”等。C 的大部分运算符既可说明为成员运算符重载函数,又可说明为友元运算符重载函数。取决于实际情况和习惯来选择合适的运算符函数。一般而言,对于双目运算符,将它重载为友元运算符比重载为成员运算符便于使用。对于单目运算符,则选择成员运算符较好。如果运算符所需的操作数(尤其是第一个操作数)希望有隐式类型转换,则运算符重载必须用友元函数。以下的经验可供参考:对于运算符“=、()、[ ]、->” 只能作为成员函数。对于运算符“ =、-=、/=、*=、&=、!=、~=、%=、<<=、>>=”,建议重载为成员函数。(2)对于双目成员运算符重载函数,编译器总是调用“运算符左右的”第一个成员变量的重载函数。A B,等效于 A.operator (B)。所以例如当“ ”运算符针对两个不同类型时,应该重载两个friend operator 函数实现交换律:
这是因为,如果采用成员运算符重载,a 100即是a.operator (100),而100 a则是100.operator (a),由于后者100是内置类型int,无法重载“ ”,因此无法实现“加法交换律”。
(3)对于单目成员运算符重载函数,如果要重载运算符 U 为类成员函数,使之能够实现表达式 U oprd,其中 oprd 为A类对象,则 U 应被重载为 A 类的成员函数,无形参。经重载后,表达式 U oprd 相当于 oprd.operator U()。因此对于重载“前置负号”:
具体调用:
或者
重载“后置负号”:
具体调用:
或者
重载“减号”:
具体调用:
或者
(4)输出操作符“<<”的重载:
调用时:
以上四种方式均可。设置返回std::ostream类型是为了可以连续使用<<及使用endl。以上就是C 中运算符重载的简要内容,感谢您的阅读!