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;
    }
  • 相关阅读:
    hdu 2819 Swap
    匈牙利算法
    hdu 1281 棋盘游戏
    hdu 2444 The Accomodation of Students(最大匹配 + 二分图判断)
    hdu 1045 Fire Net(最小覆盖点+构图(缩点))
    Python实现时钟
    挥之不去的DDOS
    随机数
    wchar_t的用法
    Visual Studio函数被警告安全,如何修改
  • 原文地址:https://www.cnblogs.com/MakeView660/p/6946665.html
Copyright © 2011-2022 走看看