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

     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
     
    /*
        名称:C++运算符重载
        作者:Michael Joessy
        日期:2017-06-05
        知识:给原有的运算符赋予新的功能
        C++的一大特性就是重载(overload),通过重载可以把功能相似的几个函数合为一个,使得程序更加简洁、高效。
        在C++中不仅函数可以重载,而且运算符也可以重载。
        运算符重载的本质:函数重载
        关键字:operator
        分类:成员函数重载   友元函数重载
    */


    #include <iostream>
    #include <string>
    using namespace std;


    // class Coordinate
    class Coordinate
    {
        
    //friend Coordinate& operator-(Coordinate& coor);
        //friend Coordinate operator+(const Coordinate& coor1, const Coordinate& coor2);
        friend ostream& operator<<(ostream& out, const Coordinate& coor);


    public:
        Coordinate(
    int nX, int nY);
        
    int getX();
        
    int getY();
        Coordinate& 
    operator-();
        Coordinate& 
    operator++();   //前置++
        Coordinate operator++(int); //后置++

        Coordinate 
    operator+(const Coordinate& coor);

        
    int operator[](int nIndex);
    protected:
    private:
        
    int m_nX;
        
    int m_nY;
    };

    Coordinate::Coordinate( 
    int nX, int nY )
    {
        m_nX = nX;
        m_nY = nY;
    }

    Coordinate& Coordinate::
    operator-()
    {
        m_nX = -m_nX;
        m_nY = -m_nY;
        
    return *this;
    }

    Coordinate& Coordinate::
    operator++()
    {
        m_nX++;
        m_nY++;
        
    return *this;
    }

    Coordinate Coordinate::
    operator++( int )
    {
        Coordinate old(*
    this);
        m_nX++;
        m_nY++;
        
    return old;
    }

    int Coordinate::getX()
    {
        
    return m_nX;
    }

    int Coordinate::getY()
    {
        
    return m_nY;
    }

    Coordinate Coordinate::
    operator+( const Coordinate& coor )
    {
        Coordinate tmp(
    00);
        tmp.m_nX = 
    this->m_nX + coor.m_nX;
        tmp.m_nY = 
    this->m_nY + coor.m_nY;
        
    return tmp;
    }

    int Coordinate::operator[]( int nIndex )
    {
        
    if (0 == nIndex)
        {
            
    return m_nX;
        }
        
    else if (1 == nIndex)
        {
            
    return m_nY;
        }
        
    else
        {
            
    return -1;
        }
    }

     
    //Coordinate& Coordinate::operator-( Coordinate& coor )
     //{
     // coor.m_nX = -coor.m_nX;
     // coor.m_nY = -coor.m_nY;
     // return *this;
     //}

     
    //Coordinate Coordinate::operator+( const Coordinate& coor1, const Coordinate& coor2 )
     //{
     // Coordinate tmp(0, 0);
     // tmp.m_nX = coor1.m_nX + coor2.m_nX;
     // tmp.m_nY = coor1.m_nY + coor2.m_nY;
     // return tmp;
     //}

    ostream& 
    operator<<(ostream& out, const Coordinate& coor)
    {
        out << coor.m_nX << 
    "," << coor.m_nY;
        
    return out;
    }




    int main(void)
    {
        
    /************************************************************************/
        
    /* string  operator = + <<  
        /************************************************************************/

        string str1(
    "Michael");
        string str2(
    "Joessy");
        string str3 = str1 + 
    " " + str2;
        cout << str3 << endl;

        
    /************************************************************************/
        
    /* 一元运算符重载 
        /************************************************************************/

        
    // -(负号)
        Coordinate coor1(23);
        -coor1;                 
    //coor1.operator-();    
                                //operator-(coor1);    friend   
        cout << coor1.getX() << "," << coor1.getY() << endl;
        
    // ++(前置)   
        ++coor1;                //coor1.operator++();
        cout << coor1.getX() << "," << coor1.getY() << endl;
        
    // ++(后置)   
        coor1++;                //coor1.operator++(0);
        cout << coor1.getX() << "," << coor1.getY() << endl;

        
    /************************************************************************/
        
    /* 二元运算符重载 
        /************************************************************************/

        Coordinate coorAdd1(
    13);
        Coordinate coorAdd2(
    25);
        Coordinate coorAddRes3(
    00);
        coorAddRes3 = coorAdd1 + coorAdd2;   
    //coorAdd1.operator+(coorAdd2)
                                             //operator+(coorAdd1, coorAdd2) friend
        cout << coorAddRes3.getX() << "," << coorAddRes3.getY() << endl;

        
    /************************************************************************/
        
    /* 输出运算符重载  
        /* 必须使用友元运算符重载
        /************************************************************************/

        Coordinate coorTest(
    78);
        cout << coorTest << endl;            
    //operator<<(cout, coorTest)


        
    /************************************************************************/
        
    /* []索引运算符重载  
        /* 必须使用成员运算符重载
        /************************************************************************/

        Coordinate coorIndex(
    35);
        cout << coorIndex[
    0] << endl;        //coorIndex.operator[](0)
        cout << coorIndex[1] << endl;        //coorIndex.operator[](1)


        cin.get();
        
    return 0;
    }
  • 相关阅读:
    全面提价2499元起小米6发布:四曲陶瓷机身+骁龙835+变焦双摄(小米在设计上也多次获得红点最佳、iF金奖等72项工业设计大奖)
    VCL的通用属性,方法和事件 good
    抗日名将粟裕
    部署 Redis 群集
    Xamarin
    NET Core控制反转(IoC)
    C#开发Linux守护进程
    数据一致性(consistency)、服务可用性(availability)、分区容错性(partition-tolerance)
    ssm框架
    javascript面向对象之闭包
  • 原文地址:https://www.cnblogs.com/MakeView660/p/6946665.html
Copyright © 2011-2022 走看看