• C++(三十五) — 运算符重载


         运算符重载的实质:函数重载。除了增加一个关键字 operator 外,与函数重载没有区别,都是通过该类的某个对象来访问重载运算符。

     (1)重载运算符时,运算符运算顺序和优先级不变操作数个数不变

     (2)不能创造新的运算符;

     (3)形式:重载为类的成员函数。对象本身就是其中的一个操作数,所以形参表内参数的数目比操作数的数目少一个

                         重载为类的友元函数。一元运算符有一个形参;二元运算符有两个形参;每个形参代表运算符的一个操作数。

     1、友元函数和成员函数的应用举例,一般情况下应用成员函数。

    #include <iostream>
    using namespace std;
    
    class Complex
    {
    public:
        Complex(int a = 0, int b = 0)
        {
            this->a = a;
            this->b = b;
        }
        void printCom()
        {
            cout << a << " + " << b << "i" << endl;
        }
    public:
        // 友元函数实现,必须和实现的完全一样
        friend Complex operator+(Complex &c1, Complex &c2);
        friend Complex& operator++(Complex &c1);
        friend Complex operator++(Complex &c1, int);
        friend ostream& operator<<(ostream &out, Complex &c1);
        //friend void operator<<(ostream &out, Complex &c1);
    
        //成员函数法实现 - 号运算符重载
        Complex operator-(Complex &c2)
        {
            Complex tmp(a - c2.a, b - c2.b);
            return tmp;
        }
        //成员函数实现 前置-- 操作
        Complex& operator--()
        {
            a--; b--;
            return *this;
        }
        //成员函数实现 后置-- 操作,与 前置-- 使用占位符进行区别。
        Complex operator--(int)
        {
            Complex tmp = *this;
            a--; b--;
            return tmp;
        }
    private:
        int a, b;
    };
    
    //友元函数实现 + 号运算符重载
    Complex operator+(Complex &c1, Complex &c2)
    {
        Complex tmp(c1.a + c2.a, c1.b + c2.b);
        return tmp;
    }
    // 友元函数实现 一元运算符 重载,前置++
    Complex& operator++(Complex &c1)
    {
        c1.a++;
        c1.b++;
        return c1;
    }
    // 友元函数实现  一元运算符 重载,后置++
    Complex operator++(Complex &c1, int)
    {
        Complex tmp = c1;
        c1.a++;
        c1.b++;
        return tmp;
    }
    
    void main()
    {
        Complex c1(1, 2), c2(3, 4);
        //1、全局函数实现,对于私有成员使用了友元函数。
        Complex c3 = c1 + c2;
        c3.printCom();
        //2、成员函数实现
        Complex c4 = c1 - c2;
        c4.printCom();
    
        //3、全局函数实现,前置++
        ++c1;
        c1.printCom();
        //4、成员函数实现,前置--
        --c1;
        c1.printCom();
    
        //5、全局函数实现,后置++
        Complex c5 = c1++;
        c5.printCom();
        c1.printCom();
        //6、成员函数实现,后置--
        Complex c6 = c1--;
        c6.printCom();
        c1.printCom();
    
        system("pause");
    }

    2、友元函数的应用场景,左移右移操作符的重载。

    //只能使用友元函数实现左移、右移操作运算符
    /*oid operator<<(ostream &out, Complex &c1)
    {
        out << c1.a << " + " << c1.b << "i" << endl;
    }*/
    //只能使用友元函数实现左移、右移操作运算符
    ostream& operator<<(ostream &out, Complex &c1)
    {
        out << c1.a << " + " << c1.b << "i" << endl;
        return out;
    }
    
    void main()
    {
            int a = 10;
        Complex c1(1, 2), c2(3, 4);
        //cout << c1;
        cout << c1 << "abv" << endl;
           system("pause");
    }
  • 相关阅读:
    利用html2canvas将html页面截图 js
    微信网页分享功能 js
    json数组排序 js
    数字千位符 js
    调用百度Api读取图片文字 C#
    判断手机移动端js
    网页添加水印js
    css 文字隐藏,鼠标移动显示
    删除某个数据库下所有表
    linux错误记录
  • 原文地址:https://www.cnblogs.com/eilearn/p/10911001.html
Copyright © 2020-2023  润新知