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;
    }
  • 相关阅读:
    JavaScript 与 Java 是两种完全不同的语言,无论在概念还是设计上。
    JavaScript 是脚本语言
    java String去除两端的空格和空字符
    response.sendRedirect 的功能是地址重定向(页面跳转)
    Java中“|”和“||”用法的区别
    如何居中div?
    DIV居中的几种方法
    table 中的tr 行点击 变换颜色背景
    Html-浅谈如何正确给table加边框
    背景图以拉伸方式(不重复)填充背景
  • 原文地址:https://www.cnblogs.com/MakeView660/p/6946665.html
Copyright © 2011-2022 走看看