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.2 成员函数和构造函数

我们为Date设计了一个初始化函数,它提供了重要的日期合法性检查功能。然而,如果我们使用不当的话,日期检查功能将毫无用处。例如,假定我们已经为Date定义了输出运算符<<(9.8节):

这段代码中,我们定义today后,“忘记了”立即对它进行初始化,而“某人”在我们及时调用init_day()之前就使用了它。而且“某人”认为调用add_day()是浪费时间,或许他根本没听说过这个函数,因此他亲手构造了tomorrow而不是调用add_day()。由于这些情况碰巧发生,这个程序变成了一段问题代码——而且问题非常严重。有时,而且可能是大多数时候,它工作正常,但一些小的改变就可能导致严重的错误。例如,一个未初始化的Date会产生垃圾输出,而简单地为成员变量d加1来推移日期会成为定时炸弹:当today表示月底那天时,加1操作会导致一个非法的日期。这段“问题严重的代码”最大的问题是,它看起来似乎没什么问题。

上述思考促使我们寻找更好的操作实现方式,我们需要不会被程序员忘记的初始化函数,以及被忽视的可能性很低的操作。实现这些目标的基本技术就是成员函数(member function),即将函数声明于类体内,作为类的成员。例如:

与类同名的成员函数是特殊的成员函数,称为构造函数(constructor),专门用于类对象的初始化(“构造”)。如果一个类具有需要参数的构造函数,而程序员忘记利用它初始化类对象的话,编译器会捕获这个错误。C++提供了一种专用且方便的语法来进行这种初始化: ...

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