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. java反射--动态加载

    Class.forName("类的全称") 1)不仅表示类的类类型,还表示了动态加载类 2)请区分编译,运行 3)编译时刻加载类是静态加载类,运行时刻加载类是动态加载类 比如下面: ...

  2. vmware-Binary translation is incompatible with long mode on this platform

    解决方法:Binary translation is incompatible with long mode on this platform. Disabling long mode. Withou ...

  3. Android 屏幕自适应方向尺寸

    最近感觉要被屏幕适配玩死了…… 安卓的手机为虾米不能像苹果那样只有几个分辨率呢?为什么呢!!!!!!!阿门…… 目前想到有两种解决办法…… 第一种:   HTML5+CSS3+WebView交互……目 ...

  4. moment

    var now = moment(1410181234567)var formatted = now.format('YYYY-MM-DD HH:mm:ss')console.log(formatte ...

  5. C#:文件操作(待补充)

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

  6. Linux 设置IP,gate, 以及自动获取IP的方法

    一.使用命令设置ubuntu的ip地址 1.修改配置文件blacklist.conf禁用IPV6: sudo vi /etc/modprobe.d/blacklist.conf 2.在文档最后添加 b ...

  7. AutoFac文档4(转载)

    目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 自动装配 从容器中可用 ...

  8. PHP SOCKET编程(未完)

    转 http://blog.csdn.net/hguisu/article/details/7448528

  9. Java运行Python脚本的几种方式

    由于在项目需要执行Python,找寻相关资料,总结出以下几种方式: 直接执行Python脚本代码 引用 org.python包 PythonInterpreter interpreter = new ...

  10. 第十六周oj刷题——Problem E: B 构造函数和析构函数

    Description 在建立类对象时系统自己主动该类的构造函数完毕对象的初始化工作, 当类对象生命周期结束时,系统在释放对象空间之前自己主动调用析构函数. 此题要求: 依据主程序(main函数)和程 ...