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;
    }
  • 相关阅读:
    构造函数作为友元函数的参数
    引用调用
    分块查找
    折半查找
    c++中map按key和value排序
    STL之map学习实例
    STL之stack
    STL之map
    STL之string
    STL之template类模板
  • 原文地址:https://www.cnblogs.com/MakeView660/p/6946665.html
Copyright © 2011-2022 走看看