定义:对抽象数据类型也能够直接使用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://www.cnblogs.com/helloforworld/p/5652881.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/236638
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!