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

    运算符重载是为了解决这样一类问题:我们知道对于整型可以用二元运算符(就是+,-,*,/因为这些运算都是两个变量参与,所以谓之二元,相比之下一元运算符就是自增,自减运算)直接进行运算,但对于类这样的数据结构直接的加减运算显然不被支持,这就需要用到运算符重载的概念

    • 全局函数形式----返回类型 operator关键字 运算符(参数列表)
    以数学中的复数为例,运算符重载可实现实部和虚部的分别相加
    #include<iostream>
    using namespace std;
    class complex
    {
    public:
        int a;
        int b;
    public:
        complex(int a=0,int b=0)
        {
            this->a = a;
            this->b = b;
        }
        void printmyself()
        {
            cout << "我就是那个复数:" << this->a << "+" << this->b << "i" << endl;
        }
        
    };
    complex myadd(complex &c1, complex &c2)
    {
        complex temp(c1.a + c2.a,c1.b+c2.b);
        return temp;
    }
    
    complex operator+(complex &c1,complex &c2)//一个典型运算符重载
    {
        complex temp(c1.a+c2.a,c1.b+c2.b);
        return temp;
    }
    
    void main()
    {
        //运算符重载简化 ,使得自定义数据以一种简化的方式操作
        //复数,实部相加,虚部相加
        //int a, b;
        //int c = a + b;
        complex c1(2, 3), c2(4, 5);
        complex c3;
        c3 = c1 + c2;//对于用户自定义数据类型C++默认情况下,不知道如何进行运算
        c3.printmyself();
        //运算符重载,使得用户自定义数据类型得以加载
        system("pause");
    }

    输出结果:

    •  成员函数形式
    #include<iostream>
    using namespace std;
    class complex
    {
    public:
        int a;
        int b;
    public:
        complex(int a=0,int b=0)
        {
            this->a = a;
            this->b = b;
        }
        void printmyself()
        {
            cout << "我就是那个复数:" << this->a << "+" << this->b << "i" << endl;
        }
        complex operator+(complex &c2)//左操作隐蔽不用写
        {
            this->a = this->a + c2.a;
            this->b = this->b + c2.b;
            return *this;
        }
    };
    
    
    void main()
    {
        //运算符重载简化 ,使得自定义数据以一种简化的方式操作
        //复数,实部相加,虚部相加
        //int a, b;
        //int c = a + b;
        complex c1(2, 3), c2(4, 5);
        complex c3;
        c3 = c1.operator+(c2);//对于用户自定义数据类型C++默认情况下,不知道如何进行运算
        c3.printmyself();
        //运算符重载,使得用户自定义数据类型得以加载
        system("pause");
    }
    • 友元函数形式
    #include<iostream>
    using namespace std;
    class complex
    {
    public:
        int a;
        int b;
    public:
        friend complex operator+(complex &c1, complex &c2);//可能出现的问题是这里的返回类型和下面实现的返回类型不一致,如果是复数都为复数,如果是引用则都为引用
        complex(int a=0,int b=0)
        {
            this->a = a;
            this->b = b;
        }
        void printmyself()
        {
            cout << "我就是那个复数:" << this->a << "+" << this->b << "i" << endl;
        }
        
    };
    
    complex operator+(complex &c1,complex &c2)
    {
        complex temp(c1.a + c2.a, c1.b + c2.b);
        return temp;
    }
    void main()
    {
        //运算符重载简化 ,使得自定义数据以一种简化的方式操作
        //复数,实部相加,虚部相加
        complex c1(2, 3), c2(4, 5);
        complex c3;
        c3 = c1 + c2;
        c3.printmyself();
        system("pause");
    }
  • 相关阅读:
    节点和坐标系
    精灵类
    导演类
    部分辅助宏
    妥善使用autorelease()方法
    内存管理笔记
    向eclipse中的项目导入jar包(作为library引用和放入web-inf/lib下的两种方法和区别)
    Request processing failed; nested exception is java.lang.NullPointerException
    getRequestURI、getReuqestURL的区别【转】
    tomcat部署javaWeb项目,界面样式都没有加载
  • 原文地址:https://www.cnblogs.com/saintdingspage/p/12044184.html
Copyright © 2011-2022 走看看