运算符重载
定义:对抽象数据类型也能够直接使用C++提供的运算符。运算符重载能够使程序更简洁,代码更容易理解。对已有的运算符赋予多重的含义。
运算符重载的实质是函数的重载。如果将运算符重载函数作为成员函数,它可以通过this指针自由地访问本类的数据成员,因此可以少写一个函数的参数。但必须要求运算表达式第一个参数(即运算符左侧的操作数)是一个类对象,而且与运算符函数的类型相同。因为必须通过类的对象去调用该类的成员函数,而且只有运算符重载函数返回值与该对象同类型,运算结果才有意义。
将双目运算符重载为友元函数时,在函数的形参列表中必须有两个参数,不能省略,形参的顺序任意,不要求第一个参数必须为类对象。但是运算符左侧的操作数与函数第一个操作数对应,运算符右侧的操作数与函数的第二个参数对应。
返回值类型operator 运算符 (形参表)
{
. . . .
}
在程序编译时:
- 把含运算符的表达式转化为对运算符函数的调用
- 把运算符的操作数转化为运算符函数的参数
- 运算符被多次重载时,根据实参的类型决定调用哪个运算符函数
- 运算符可以被重载成普通函数
- 也可以被重载成类的成员函数
重载为普通函数时,参数个数为运算符目数。
重载为成员函数时,参数个数为运算符目数-1。
将运算符还可以重载为友元函数,这样就变成了普通函数。
代码如下:
#include <iostream> using namespace std; class Complex { public: int real; int img; Complex(int r, int i):real(r),img(i){} Complex operator +(const Complex & a) { return(Complex(real + a.real, img + a.img)); } void print() { cout << "the real value is :"; cout << real << endl; cout << "the img value is :"; cout << img << endl; } }; Complex operator - (const Complex &a, const Complex &b) { Complex c(0, 0); c.real = a.real - b.real; c.img = a.img - b.img; return (c); } int main() { Complex a(2, 3), b(3, 4), c(0,0); c = a + b; a.print(); b.print(); c.print(); c = a - b; a.print(); b.print(); c.print(); return 0; }
参考链接:
https://www.coursera.org/learn/cpp-chengxu-sheji
本人博客已迁往 https://chenlongxiabc.github.io 欢迎访问。
博客内容均为自己编写,其中参考了相关内容。若有侵权他人请联系我,并对此表示歉意。若要转载或是其他用途,请联系我。我的邮箱diegefulan@hotmail.com