当前位置:首页 > 公众号精选 > 小林coding
[导读]— 1 — << 运算符的重载 C++ 在输出内容时,最常用的方式: std::cout << 1 <<"hello"; 提出问题: 那这条语句为什么能成立呢? cout 是什么?为什么 << 运算符能用在 cout 上呢? 原因: 实际上,cout 是在 iostream 头文件中定义的 ostream 类的对象。 << 



 1 

<< 运算符的重载


C++ 在输出内容时,最常用的方式:
std::cout << 1 <<"hello";


提出问题:

  • 那这条语句为什么能成立呢?

  • cout 是什么?为什么 << 运算符能用在 cout 上呢?


原因:

  • 实际上,cout 是在 iostream 头文件中定义的 ostream 类的对象。

  • << 能够用在 cout 上是因为,在 ostream 类对 << 进行了重载。


对于如下这条语句

std::cout << 1 <<"hello";


有可能按以下的方式重载成 ostream 类的成员函数:


ostream & ostream::operator<<(int n){ .... // 输出n整型的代码 return *this;}
ostream & ostream::operator<<(const char * s){ .... // 输出s字符串的代码 return *this;}


那么在使用流插入<<运算符时,等价于的形式如下:


01 数据类型是int类型时:

std::cout << 1;

上面的语句,等价于:

cout.operator<<(1);


02 数据类型是字符串类型时:

std::cout << "hello";

上面的语句,等价于:

cout.operator<<("hello");


03 数据类型组合使用时:
std::cout << 1 <<"hello";

上面的语句,等价于:

( cout.operator<<(1) ).operator<<("hello");




— —


假定我们要想把某个对象里的内容进行打印输出,那么我们可以重载 ostream 类的流插入 << 运算符。


下面以 CStudent 类作为例子:



输出结果:

1,20,小林coding


需要注意:

ostream & operator<<(ostream & o, const CStudent & s)

函数是全局的,所以函数的第一个参数必须要传入 ostream 的对象,并且 CStudent 类需要将此函数声明成友元函数,使得函数可以访问 CStudent 类的私有成员变量。






 2 

>> 运算符的重载


还是以 CStudent 类作为例子,假设想通过键盘的输入的内容,来初始化对象,则我们可以重载 istream 类的流提取 >> 运算符。



输入内容和输出内容:

// 输入内容:1,20,小林coding
// 输出内容:1,20,小林coding





 3 

小结


要想流插入  <<  运算符和流提取  >>  运算符能针对自定义的对象,那么我们就需要重载针对该对象的 ostream 类的  <<  运算符 和 istream 的  >>  运算符,并且只能重载成全局的函数

然后在 CStudent 类里需要把上面的两个重载函数声明成友元函数,使得两个重载的函数可以访问和赋值 CStudent 类里的私有成员函数。



推荐阅读:
C++ 运算符重载的基本概念
C++ 赋值运算符'='的重载(浅拷贝、深拷贝)
C++ 手把手教你实现可变长的数组

  小林coding  



你的赞,很重要呀

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在编程和计算中,运算符优先级是解释和计算表达式的一个关键因素。本文旨在阐述运算符优先级的概念、规则及其在表达式中的应用,以帮助读者更好地理解和运用运算符优先级。

关键字: 表达式 运算符 编程

C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言...

关键字: C51语言 运算符

Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向...

关键字: Java C++

摘要:介绍了基于RFID的小区门禁管理系统,通过RS232串口连接RFID的读写器与PC机,给出了PC机在VisualC++6.0软件环境下,采用C++语言进行编写软件界面,并利用VC6.0的ADO访问技术来访问Acce...

关键字: RFID Access C++ RS232

摘 要:针对分布式孔径数字全息系统要求保密性高,数据量大等特点,文中设计了基于C++语言与OpenCV函数库的三孔径数字成像系统软件。软件首先对各孔径间装配导致的再现像缩放、旋转误差进行校正,然后进行孔径综合,并通过微软...

关键字: 分布式孔径 数字全息 C++ OpenCV MFC

嵌入式系统是指以应用为中心、以计算机技术为基础,软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

关键字: QT 嵌入式 C++

IOBE 已公布 2020 年 9 月的编程语言排行榜。 在本期榜单中指数没有明显的变化,值得注意的是,java占有率继续下降,从上个月的14.43%降到13.48%. 回到2003,编程语言C++是真正的赢家。它在20...

关键字: 编程语言 C++

提到C/C++语言很多初学者都觉得,学到中间就进行不下去了,但如果你最难啃的那几块硬骨头拿下,一切都会顺畅许多,而且C++诞生很久了,因此有大量可以免费阅读编程文档。近日,在Quora上发现一份免费的C ++资料列表,涉...

关键字: C++

昨天提供了关于C语言的思维导图: 一文带你学C语言,详细知识点思维导图! 被一些朋友威胁。 我太难了,这不,求生欲极强的我,还是被迫再次营业。 思维导图原文地址: https://www.csdn.net/gather_...

关键字: C++

— 1 — 要实现什么函数呢? 假设我们要实现一个会自动扩展的数组类,我们需要实现函数呢?先从下面 main 函数使用的功能,看看有什么函数是需要我们实现的。 输出结果: 0 1 2 3 40 1 2 100 4 要实现...

关键字: C++
关闭
关闭