Skip to Content
C++程序设计:原理与实践(基础篇)(原书第2版)
book

C++程序设计:原理与实践(基础篇)(原书第2版)

by 本贾尼 斯特劳斯特鲁普
August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
Pearson
Content preview from C++程序设计:原理与实践(基础篇)(原书第2版)

10.8 用户自定义输出运算符

为一个给定类型定义输出运算符<<,是一件很简单的事情。要考虑的主要问题是不同人可能喜欢不同的输出形式,因此很难达成共识来确定一个单一的格式。但即便无法提供一个令所有人都满意的单一输出格式,为用户自定义类型定义输出运算符<<,通常也是一个好的策略。这样,我们至少可以在调试和早期开发期间,很容易地输出这个类型的对象。接下来,我们还可以提供一个更为复杂的<<,允许用户给出格式信息。而且,如果我们希望输出样式与<<提供的不同,可以简单地绕过<<,按照我们希望的格式直接输出用户自定义类型中的内容。

下面是为9.8节中Date类型定义的一个简单的输出运算符,它简单地打印年、月、日,中间用逗号分隔,两边加括号:

这个输出运算符会将2004年8月30日打印为“(2004,8,30)”的形式。这种简单的成员列表的表示方式,对于成员数较少的类型来说很适合,除非我们有更好的想法或者更特殊的需求。

在9.6节中,我们提到,处理一个用户自定义运算符,实际是调用对应的函数。下面的例子演示了这一处理过程,假定已经为Date定义了上面的<<操作符,那么

其中d1是Date类型的对象,等价于下面的调用:

需要注意operator<<()是如何接受一个ostream&作为第一个参数,又将其作为返回值返回的。这就是为什么可以将输出操作“链接”起来的原因,因为输出流按这种方式逐步传递下去了。例如,可以像下面这样输出两个日期: ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

C++语言导学(原书第2版)

C++语言导学(原书第2版)

本贾尼 斯特劳斯特鲁普
管理Kubernetes

管理Kubernetes

Brendan Burns, Craig Tracey
Python编程入门与实战

Python编程入门与实战

Posts & Telecom Press, Fabrizio Romano

Publisher Resources

ISBN: 9787111562252