zoukankan      html  css  js  c++  java
  • 运算符重载

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

  • 相关阅读:
    ASP.NET Web API 框架研究 Self Host模式下的消息处理管道
    ASP.NET Web API 框架研究 Web Host模式下的消息处理管道
    ASP.NET Web API 框架研究 核心的消息处理管道
    ASP.NET Web API 框架研究 Web Host模式路由及将请求转出到消息处理管道
    ASP.NET Web API 框架研究 ASP.NET Web API 路由
    ASP.NET Web API 框架研究 ASP.NET 路由
    ASP.NET Web API 入门 (API接口、寄宿方式、HttpClient调用)
    MVVM模式
    RESTful Web API 理解
    C# 函数式编程及Monads.net库
  • 原文地址:https://www.cnblogs.com/helloforworld/p/5652881.html
Copyright © 2011-2022 走看看