C++ 重载操作符- 01 简单的入门
2016-09-21 14:46
337 查看
重载操作符的定义
这篇博客是对 重载操作符 的一个概要性的介绍。重载操作符是C++语言的高级功能,当我们写一个类的时候,可以根据需要学一个重载操作符,如果 不需要,我们可以不写。
大量的操作符都可以重载。可以重载的操作符有42个。
有4个操作符是不可以重载的。
下面写几个例子,来看看,如何重载操作符。
#include <iostream> using namespace std; int main(){ int a, b; a = 12; b = 9; cout << a + b << endl; cout << "Hello" << endl; system("pause"); return 0; }
上面的代码中的
+,因为C++已经做好了
int变量类型的 加法,所以这段代码是可以运行的。
但是如果是我们自己写的类,看看下面的程序可不可以运行:
#include <iostream> using namespace std; class Person{ }; int main(){ int a, b; a = 12; b = 9; cout << a + b << endl; Person p1, p2; p1 + p2; cout << "Hello" << endl; system("pause"); return 0; }
上面这段程序编译都通过不了。这里我想将
p1和
p2相加起来,就像
a和
b两个
int类型的数据相加一样。是不行的,因为C++它不知道如何对这两对象进行加法运行,因为这个
Person类是我自己写的,C++不知道如何处理
Person类的
+运算。所以,我们不能这样写。
如果我们非要将对
Person类进行
+操作, 就必须要在
Person类里面对
+操作符进行重载。这样C++就知道了:如何去执行
p1 + p2这行代码了。
我们写一个最简单的
+操作符重载。
+的重载有两个参数
class Person{ public: //重载操作符:+ void operator+(const Person& lhs, const Person& rhs){ } };
上面这行代码编译不通过。
其实参数写一个就可以,因为第一个隐含的参数是
this。(如果将它做为友元的话,我们就要必须写成上面这个那样,要有两个参数)
class Person{ public: //重载操作符:+ void operator+(const Person& rhs){ cout << "执行了重载的加法操作" << endl; } };
现在
+操作符重载完成了,我们子啊运行一下程序看看输出结果:
21 执行了重载的加法操作 Hello 请按任意键继续. . .
重载操作符的注意事项
重载操作符的时候,必须有一个参数的类型是 类 类型。 不允许重载 C++ 的内置类型。比如下面的代码是不允许的:void operator+(int, int);
重载的操作符也不会改变操作符的优先级。 我们都知道:先做乘除,后做加减。几十个操作符是有优先级的,并不会因为我们重载了这些操作符而改变优先级,也不会改变结合性。
而且我们重载的操作符也不会进行短路计算。逻辑与(
&&)、逻辑或(
||) 是具有短路操作功能的,那么我们在重载了之后,它就不具备短路操作的功能了。所以一遍情况下,我们也不要去重载 逻辑与(
&&)、逻辑或(
||)。这些操作符都不要去重载。
还有 取地址操作符(
&) 和 逗号操作符(
,) 都不要去重载,它们是可以重载的,但是不建议重载。
重载操作符实际上是一个函数,只是这个函数的名称比较怪,叫:
operator+, 那么这个函数可以作为类的成员函数,也可以作为类的非成员函数。一遍情况下,我们将算数操作(加减乘除) 和 关系操作(大于、等于、小于、不等于)作为非成员函数,但是赋值操作,我们一般将其作为成员函数。
如果重载操作符函数是非成员函数的话,就要把它在类里面定义成友元函数 。
我们说过:重载操作符就是一个函数,只是它的函数名太奇怪了(例如:
+操作符,重载它的函数名是:
operator+)。那么在调用的时候,我们可以使用正常调用函数的方式来调用它:
operator+(item1, item2),这样写的代码是可以正常运行的。但是这样的方式我们是不希望的,如果我们这样使用重载操作符的话,还不如直接定义一个功能函数(比如函数名设计成:
addItem(item1, item2))。
我们最希望使用的调用方式是:
item1 + item2。这是我们最熟悉的方式,我们从小学的时候就开始使用这种方式。所以我们对
item1 + item2这种写法特别的喜欢。
有4个操作符,如果你想重载它,就必须定义为类的成员函数。这4个操作符是:
=(赋值操作)、
[](下标操作)、
()(函数调用操作)、
->(成员访问操作)。 就是这4个操作符,如何我们重载,就必须定义为成员函数,不能定义成飞成员函数。
其他的操作符重载,是可以随意选择的,可以定义为成员函数,也可以定义定义成非成员函数,都可以。比如:
++、
--、
==这些操作符等等。
这篇博客,是对重载操作符 的一个概要性的介绍,后面的博客里面,我们会详细的介绍一些重载操作符要如何编写代码,来实现。
相关文章推荐
- C++ 重载操作符- 01 简单的入门
- gSoap入门之二__C++开发的简单WebService服务器程序
- C++语言与OO思想介绍 - C++快速入门01
- [笨木头FireFly01]入门篇1·最简单的服务端和客户端连接
- C++入门(12):高级OOP技术:重载操作符、多继承和虚继承
- C++ 01简单工厂模式
- C++复习 01 快速入门
- C++快速入门-简单概要
- [C++]C++11 语法记录: Lambda简单入门
- ExtJS入门教程01,Window如此简单,你怎能不会?
- 【C++入门】简单的日期类操作
- C++语言与OO思想介绍 - C++快速入门01
- 用C++制作一个简单的文字游戏,纯属C++入门,有兴趣的可以看看
- C++学习第2篇-简单入门
- 提供一些简单的C++入门程序(提供源代码)
- gSoap入门之三__C++开发的简单WebService客户端程序
- c++入门之学生类的简单代码
- 第一章 快速入门 编写简单的C++程序
- C++学习第2篇-简单入门
- WebService-01入门篇(简单实现)