运算符重载

定义:对抽象数据类型也能够直接使用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

posted @ 2016-07-08 11:41  helloforworld  阅读(653)  评论(0编辑  收藏  举报