C++学习 - 操作符重载
2016-01-03 23:56
363 查看
最近看< Inside The C++ object model >又开始复习一下操作符重载,顺便记下来。
在C++中字符串是可以直接加法操作的,是因为在String类里已经重载了操作符。
声明了一个可用于将两个Point类相加的并获得一个Point的对象的副本。使用函数调用操作符可以接受任意数目的参数。
这个会隐式调用为Point类的定义的
也可以像调用普通函数一样调用重载操作符,并传递适当的类型适当数目的形参。
这个表达与上面一样。
合成赋值操作符进行逐个成员赋值。
默认情况下,取地址操作符和逗号操作符
内置逻辑与(&&)和逻辑或(||)操作符使用短路求值。
相等测试操作应该使用
一般通过重载移位操作符进行输入输出
测试对象是否为空的操作课用逻辑非操作符(
上面是输出操作符重载的简单定义。
输出操作符是:
输入操作符是:
至于算数操作符和关系操作符,定义使用基本差不多,还有一些错误检查,需要注意。
以上。
操作符重载
正常情况下,我们的操作符都是有固定的意义的,例如:+ - * /操作符,正常情况下都是可以操作数字的运算,但是当我们需要对两个对象进行相加的时候,这个时候就需要重载操作符了,不然编译器不知道两个对象如何进行操作。
在C++中字符串是可以直接加法操作的,是因为在String类里已经重载了操作符。
重载操作符定义
首先操作符的重载正常情况都是定义类内部的函数,当然也可以定义为类的友元函数。class Point{ public: Point(); Point operator+(const Point &p); private: int _a; }; Point Point::operator+(const Point &p){ Point tp(p); tp._a += this._a; return tp }
声明了一个可用于将两个Point类相加的并获得一个Point的对象的副本。使用函数调用操作符可以接受任意数目的参数。
使用重载操作符
使用重载操作符的方式,与内置类型操作数上的操作符方式一样,假设p1和p2对象,可以输出他们的和,和int一样.
cout << p1 + p2 << endl;
这个会隐式调用为Point类的定义的
operator+。
也可以像调用普通函数一样调用重载操作符,并传递适当的类型适当数目的形参。
cout << operator+(p1, p2) << endl;
这个表达与上面一样。
重载操作符设计
设计类的时候,需要记住一些有用的经验原则,可以有助于确定应该提供那些重载操作符。不要重载有内置含义的操作符
赋值操作符、取地址操作符和逗号操作符对类的类型操作数有默认的含义。如果没有特定的重载版本。编译器会自己定义一下操作符:合成赋值操作符进行逐个成员赋值。
默认情况下,取地址操作符和逗号操作符
内置逻辑与(&&)和逻辑或(||)操作符使用短路求值。
大多数操作符对类对象没有意义
除非提供了重载定义,赋值、取地址和逗号对类类型的操作数没有意义。相等测试操作应该使用
operator==
一般通过重载移位操作符进行输入输出
测试对象是否为空的操作课用逻辑非操作符(
operator!)来表示。
输入输出操作符
支持I/O操作的类所提供的
I/O操作接口,一般应该与标准库iostream为内置类型定义的接口相同,隐刺,许多类需要重输入和输出操作符:
ostream& operator<<( ostream &os, const Point &pt){ os << "( "; os << pt.a; os << " )"; }
上面是输出操作符重载的简单定义。
输出操作符是:
friend ostream& operator<<( ostream &os, const Point &pt){ os <<"( "; os << pt.a; os <<" )"; }
输入操作符是:
friend istream& operator>>( istream &os, const Point &pt){ os >> pt.a; }
至于算数操作符和关系操作符,定义使用基本差不多,还有一些错误检查,需要注意。
以上。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性