前文:C++之操作符重载探究(二):算术操作符重载

输出操作符重载

  在下面右例中我们发现,打印函数看起来有些复杂,我们同样期望可以将主函数中的p3.print( )直接改为cout<<p3,让cout直接操作对象,这时我们就需要对输出操作符进行重载。
  输出操作符重载函数不能被定义成一个成员函数,因为输出操作符第一个操作数是ostream对象。
  因为输出操作符通常是需要访问类的私有成员,所以它经常被声明为类的友元函数。

例:

注意:
  输出操作符<<的重载,返回的ostream对象一定不能是const类型。而且输出操作符函数里的ostream参数,也不能是const类型。因为如果将ostream对象声明成const类型的对象,将不能再向ostream对象中写入任何数据,就不能输出数据了。

附上例代码:

//小问学编程
#include <cstdlib>
#include<iostream>
using namespace std;class Point
{friend Point operator+(const Point&,const Point&);friend Point operator-(const Point&,const Point&);friend Point operator*(const Point&,const Point&);friend Point operator/(const Point&,const Point&);friend ostream& operator<<(ostream& os,const Point& p);
public:Point(float _x,float _y):x(_x),y(_y){}
private:float x;float y;
};inline  Point operator+(const Point& pa,const Point& pb)
{Point pc(pa.x+pb.x,pa.y+pb.y);return pc;
}
inline  Point operator-(const Point& pa,const Point& pb)
{Point pc(pa.x-pb.x,pa.y-pb.y);return pc;
}
inline  Point operator*(const Point& pa,const Point& pb)
{Point pc(pa.x*pb.x,pa.y*pb.y);return pc;
}
inline  Point operator/(const Point& pa,const Point& pb)
{if(pa.y==0||pb.y==0){exit(0);}Point pc(pa.x/pb.x,pa.y/pb.y);return pc;
}ostream& operator<<(ostream& os,const Point& p)
{cout<<"("<<p.x<<","<<p.y<<")"<<endl;return os;
}int main()
{Point p1(1,2);Point p2(3,4);Point p3=p1+p2; cout<<p3;Point p4=p1-p2; cout<<p4;Point p5=p1*p2; cout<<p5;Point p6=p1/p2; cout<<p6;return 0;
}

运行结果:


C++之操作符重载探究(四):下标运算符重载

C++之操作符重载探究(三):输出操作符重载相关推荐

  1. C++学习基础八——重载输入和输出操作符

    C++学习基础八--重载输入和输出操作符 一.重载输入操作符的要点: 1.返回值为istream &. 2.第一个参数为istream &in. 3.第二个参数为自定义类型的引用对象( ...

  2. C++之操作符重载探究(七):==运算符重载

    前文:C++之操作符重载探究(六):重载函数调用符( ) == 运算符重载   在很多情况下,我们需要判断两个对象是否相等,需要对==运算符进行重载. 例1: 附例1代码: //小问学编程 #incl ...

  3. C++之操作符重载探究(四):下标运算符重载

    前文:C++之操作符重载探究(三):输出操作符重载 下标运算符[ ]重载   如果一个类的成员是一个数组,我们可以使用下标操作符来访问数组的成员.例如一个类定义如下:   上述代码存在两个问题:(1) ...

  4. 面向对象编程(三):重载运算符和重载函数

    C++ 重载运算符和重载函数 C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载. 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是 ...

  5. 拷贝构造函数、析构函数、赋值操作符重载、取地址操作符重载和const修饰的取地址操作符重载...

    2019独角兽企业重金招聘Python工程师标准>>> 在我们学习C++的过程中,我们难免会遇到类,在类中有6个默认的函数,它们分别为:构造函数.拷贝构造函数.析构函数.赋值操作符重 ...

  6. java 两个运算符重载_Java中的操作符重载

    0.Java操作符重载 Java中我们可以执行如下语句: String fullName = "hongliang "+"cao"; System.out.pr ...

  7. Thinking in JAVA笔记——第三章 操作符 第四章控制执行流程

    3.1更简短的打印语句 import static一个包 3.2Java操作符:与c++类似 3.3优先级 java有优先级,如果忘记优先级规则,应该加括号已明确. 3.4赋值 基本类型的赋值就是赋值 ...

  8. 《JAVA编程思想》学习笔记——第三章 操作符

    在最底层,Java的数据是通过适用操作符来操作的. 几乎所有的操作符都只能操作"基本类型".例外的操作符是"=","=="和"!= ...

  9. 【C++】C++类的学习(三)——运算符重载与友元函数

    [fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 前面的两篇博文中介绍了类的一些基本特性,今天讲一讲运算符重载和友元. 运算符重载 运算 ...

最新文章

  1. HTML中的map标签的使用
  2. 快速识别Hash加密方式hashid
  3. error CS0234: 命名空间“System.Drawing”中不存在类型或命名空间名称“Image”
  4. java垃圾回收根对象_Java垃圾回收怎么理解?
  5. [leetcode] remove duplicate letters
  6. 经验证过的跨线程更新辅助类MyInvokeHelper
  7. 我是如何白嫖 Github 服务器自动抓取每日必应壁纸的?
  8. Seesaw Loss:一种面向长尾目标检测的平衡损失函数
  9. 小程序 onReachBottom 事件快速滑动时不触发的bug
  10. 逆序链表--递归思路
  11. 2018山东冬令营:UPC 计数问题 (二维树状数组)
  12. 2020-08-17每日一句
  13. 将不确定变成确定~Uri文本文件不用浏览器自动打开,而是下载到本地
  14. linux学习之vi编辑器的使用详解
  15. OMS订单管理系统框架图
  16. 杜比服务器系统安装,小编教你给Win10系统安装杜比音效驱动的方法
  17. MATLAB 数据拟合方法
  18. deeping(linux)双系统windows启动界面花屏问题的完美解决。
  19. 《动手学深度学习》(PyTorch版)代码注释 - 50 【Semantic_segmentation】
  20. 樊登读书分享ppt_樊登读书会

热门文章

  1. Java编码规范注意
  2. 基于JAVA+SpringBoot+Mybatis+MYSQL的汽车租赁系统
  3. 基于JAVA+SpringMVC+Mybatis+MYSQL的高校后勤管理系统
  4. 基于JAVA+Servlet+JSP+MYSQL的二手房交易系统
  5. 基于JAVA+SpringMVC+MYSQL的报价管理系统
  6. 学习总在继续......
  7. vim移动一行或一段代码
  8. compizconfignbsp;nbsp;中的方框…
  9. MVC应用程序播放FLV视频,部分视图可多地方重复引用
  10. IIS6中应用程序池和Web园,解决Session丢失问题