C++运算符重载Sample
2012-12-02 00:00
232 查看
我认为C++最令人惊喜的特点之一就是运算符重载
运算符重载的基础是C++解析运算符时会调用函数
比如 MyObj a, b;
a+b;
则为
a.operator+(b);
或者调用友元函数
operator+(a, b);
要注意重载后的算符不要有二义性
<p>
这里举一些简单的示例
对于<<的重载,使用友元,通用形式
</p>
<p>
声明(在类public里面):
</p><p>
<!-- lang: cpp -->
<code>
friend ostream& operator<<(ostream& os, MyObj& my);
<code>
</p>
<p>
实现(Sample):
</p><p>
<!-- lang: cpp -->
<code>
return os<<my.a<<my.b<<endl;
</code>
</p>
<p>
对于前缀++(--)和后缀--(++)
</p>
<p>
声明:
</p><p>
</p><p>
<!-- lang: cpp -->
<code>
friend MyObj operator++(MyObj); //前缀式
</code>
</p>
<p>
<!-- lang: cpp -->
<code>
friend MyObj operator++(MyObj, int); //后缀式
</code>
</p>
注:后缀式的第二个参数没有什么用
运算符重载的基础是C++解析运算符时会调用函数
比如 MyObj a, b;
a+b;
则为
a.operator+(b);
或者调用友元函数
operator+(a, b);
要注意重载后的算符不要有二义性
<p>
这里举一些简单的示例
对于<<的重载,使用友元,通用形式
</p>
<p>
声明(在类public里面):
</p><p>
<!-- lang: cpp -->
<code>
friend ostream& operator<<(ostream& os, MyObj& my);
<code>
</p>
<p>
实现(Sample):
</p><p>
<!-- lang: cpp -->
<code>
return os<<my.a<<my.b<<endl;
</code>
</p>
<p>
对于前缀++(--)和后缀--(++)
</p>
<p>
声明:
</p><p>
<!-- lang: cpp --> <code> MyObj operator++(); //前缀式 </code>
</p><p>
<!-- lang: cpp -->
<code>
friend MyObj operator++(MyObj); //前缀式
</code>
</p>
<p>
<!-- lang: cpp -->
<code>
friend MyObj operator++(MyObj, int); //后缀式
</code>
</p>
注:后缀式的第二个参数没有什么用
相关文章推荐
- PHP 应用程序的安全 -- 不能违反的四条安全规则
- [推荐]MultipleIEs -- 把多个IE装在你的系统上的软件 下载
- C++ 学习之旅二 说一说C++头文件
- C#调用C++版本dll时的类型转换需要注意的问题小结
- 设计模式中的备忘录模式解析及相关C++实例应用
- C++算法系列之日历生成的算法代码
- 程序的内存分布
- C++中 public和private派生类继承问题和访问权限问题
- 从「林」开始--C++ primer 读书笔记 -- Part II: Containers ...
- C++中的do{}while()
- 如何让C++类的成员函数作为回调函数
- 鸡啄米:C++编程入门系列之前言
- 鸡啄米:C++编程入门系列之一(进制数)
- 鸡啄米:C++编程入门系列之二(原码、反码与补码)
- 鸡啄米:C++编程入门系列之三(VS2010的使用介绍)
- 鸡啄米:C++编程入门系列之五(运算符和表达式)
- 鸡啄米:C++编程入门系列之六(算法的基本控制结构之选择结构)
- 鸡啄米:C++编程入门系列之七(算法的基本控制结构之循环结构)
- 鸡啄米:C++编程入门系列之八(自定义数据类型)