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();
    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 )
{
     == nIndex)
    {
        return m_nX;
    }
     == nIndex)
    {
        return m_nY;
    }
    else
    {
        ;
    }
}

//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;

/************************************************************************/
    /* 一元运算符重载 
    /************************************************************************/
    // -(负号)
);
    -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();
    Coordinate coorAdd2();
    Coordinate coorAddRes3();
    coorAddRes3 = coorAdd1 + coorAdd2;   //coorAdd1.operator+(coorAdd2)
                                         //operator+(coorAdd1, coorAdd2) friend
    cout << coorAddRes3.getX() << "," << coorAddRes3.getY() << endl;

/************************************************************************/
    /* 输出运算符重载  
    /* 必须使用友元运算符重载
    /************************************************************************/
    Coordinate coorTest();
    cout << coorTest << endl;            //operator<<(cout, coorTest)

/************************************************************************/
    /* []索引运算符重载  
    /* 必须使用成员运算符重载
    /************************************************************************/
    Coordinate coorIndex();
    cout << coorIndex[] << endl;        //coorIndex.operator[](0)
] << endl;        //coorIndex.operator[](1)

cin.get();
    ;
}

C++之运算符重载的更多相关文章

  1. C++ 运算符重载时,将运算符两边对象交换问题.

    在C++进行运算符重载时, 一般来讲,运算符两边的对象的顺序是不能交换的. 比如下面的例子: #include <iostream> using namespace std; class ...

  2. C#高级编程笔记2016年10月12日 运算符重载

    1.运算符重载:运算符重重载的关键是在对象上不能总是只调用方法或属性,有时还需要做一些其他工作,例如,对数值进行相加.相乘或逻辑操作等.例如,语句if(a==b).对于类,这个语句在默认状态下会比较引 ...

  3. C++运算符重载

    C++运算符重载 基本知识 重载的运算符是具有特殊名字的函数,他们的名字由关键字operator和其后要定义的运算符号共同组成. 运算符可以重载为成员函数和非成员函数.当一个重载的运算符是成员函数时, ...

  4. 标准C++之运算符重载和虚表指针

    1 -> *运算符重载 //autoptr.cpp     #include<iostream> #include<string> using namespace std ...

  5. python运算符重载

    python运算符重载就是在解释器使用对象内置操作前,拦截该操作,使用自己写的重载方法. 重载方法:__init__为构造函数,__sub__为减法表达式 class Number: def __in ...

  6. PoEduo - C++阶段班【Po学校】-Lesson03-5_运算符重载- 第7天

    PoEduo - Lesson03-5_运算符重载- 第7天 复习前面的知识点 空类会自动生成哪些默认函数 6个默认函数    1  构造  2  析构   3  赋值  4 拷贝构造  5 oper ...

  7. 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换

    [源码下载] 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 运算符重载 自 ...

  8. 我的c++学习(8)运算符重载和友元

    运算符的重载,实际是一种特殊的函数重载,必须定义一个函数,并告诉C++编译器,当遇到该运算符时就调用此函数来行使运算符功能.这个函数叫做运算符重载函数(常为类的成员函数). 方法与解释 ◆ 1.定义运 ...

  9. c/c++面试题(6)运算符重载详解

    1.操作符函数: 在特定条件下,编译器有能力把一个由操作数和操作符共同组成的表达式,解释为对 一个全局或成员函数的调用,该全局或成员函数被称为操作符函数.该全局或成员函数 被称为操作符函数.通过定义操 ...

  10. 实验12:Problem H: 整型数组运算符重载

    Home Web Board ProblemSet Standing Status Statistics   Problem H: 整型数组运算符重载 Problem H: 整型数组运算符重载 Tim ...

随机推荐

  1. linux下安装oracle中遇到的一些问题

    1.出现了:Environment variable ORACLE_UNQNAME not defined. Please set ORACLE_UNQNAME to da tabase unique ...

  2. ubuntu 14.04为/检查磁盘时发生严重错误的解决方法

    http://jingyan.baidu.com/article/0aa22375bbffbe88cc0d6419.html

  3. C#:ZedGraph画图控件(待补充)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. 读写SQLServer数据库中的image类型数据(简单)

    1.将double类型的数据存储于image类型的变量中: (1). char *CManualForecastResultBll::DoubleArray2Binary(std::vector< ...

  5. shell中的find和xargs详细解析

  6. localStorage使用总结,页面跳转,保存值

    例子 <ul id="edit" contenteditable="true"> <li>修改我吧,然后刷新页面看看,^_^</l ...

  7. csrf跨站请求攻击

    浅谈CSRF攻击方式    http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html

  8. (原创)android6.0系统 PowerManager深入分析(很具体)

    概述 一直以来,电源管理是电子产品设计中很重要的环节.也是不论什么电子设备中最为重要的系统模块之中的一个,优秀的电源管理方案.可以提供持久的续航能力,良好的用户体验.更能提升电子产品的竞争力. 移动设 ...

  9. Web Socket rfc6455 握手 (C++)

    std::string data((const char*)buf->data(),bytes_transferred); recycle_buffer(buf); std::string ke ...

  10. location 符号

    元字符 描述 \ 将下一个字符标记符.或一个向后引用.或一个八进制转义符.例如,“\\n”匹配\n.“\n”匹配换行符.序列“\\”匹配“\”而“\(”则匹配“(”.即相当于多种编程语言中都有的“转义 ...