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版)

9.4.3 保持细节私有性

现在,我们还有一个问题没有解决:如果有人忘了使用成员函数add_day()怎么办?如果有人决定直接修改月份怎么办?毕竟,我们“忘了”提供这些功能:

只要我们还是将Date的描述暴露给所有人,那么就会有人(无意地或有意地)把事情搞乱——也就是制造出非法的日期值。例如上面的代码就创建了日历上不存在的日期。这样的非法对象会成为定时炸弹:有人无意间使用非法值只是时间问题,他会得到一个运行时错误,而通常情况会更糟,程序会产生错误的结果。

上述担忧使我们得到如下结论:Date的描述对用户来说应该是不可访问的,除非是通过类中提供的公有成员函数来访问。下面是按这种思想改进后的第一个版本:

使用新版Date的示例如下:

“合法日期”的概念是合法值思想的一个重要特例。我们在设计类型时,设法保证合法值。即,我们隐藏类描述,提供一个创建合法对象的构造函数,所有成员函数的设计也遵循接受合法值、生成合法值的原则。对象的值通常称为状态(state),因此,合法值的思想通常被称为对象的合法状态(valid ...

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