Beginning
C++17
From Novice to Professional
—
Fifth Edition
—
Ivor Horton
Peter Van Weert
Beginning C++17
From Novice to Professional
Fifth Edition
Ivor Horton
Peter Van Weert
Beginning C++17: From Novice to Professional
Ivor Horton Peter Van Weert
Stratford-upon-Avon, Warwickshire, United Kingdom Kessel-Lo, Belgium
ISBN-13 (pbk): 978-1-4842-3365-8 ISBN-13 (electronic): 978-1-4842-3366-5
https://doi.org/10.1007/978-1-4842-3366-5
Library of Congress Control Number: 2018936369
Copyright © 2018 by Ivor Horton and Peter Van Weert
This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the
material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation,
broadcasting, reproduction on microfilms or in any other physical way, and transmission or information storage
and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now known or
hereafter developed.
Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with
every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an
editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark.
The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are
not identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to
proprietary rights.
While the advice and information in this book are believed to be true and accurate at the date of publication,
neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or
omissions that may be made. The publisher makes no warranty, express or implied, with respect to the material
contained herein.
Managing Director, Apress Media LLC: Welmoed Spahr
Acquisitions Editor: Steve Anglin
Development Editor: Matthew Moodie
Coordinating Editor: Mark Powers
Cover designed by eStudioCalamar
Cover image designed by Freepik (www.freepik.com)
Distributed to the book trade worldwide by Springer Science+Business Media New York,
233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail
orders-ny@springer-sbm.com, or visit www.springeronline.com. Apress Media, LLC is a California LLC
and the sole member (owner) is Springer Science + Business Media Finance Inc (SSBM Finance Inc).
SSBM Finance Inc is a Delaware corporation.
For information on translations, please e-mail editorial@apress.com; for reprint, paperback, or audio
rights, please email bookpermissions@springernature.com.
Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions
and licenses are also available for most titles. For more information, reference our Print and eBook Bulk
Sales web page at www.apress.com/bulk-sales.
Any source code or other supplementary material referenced by the author in this book is available to
readers on GitHub via the book’s product page, located at www.apress.com/9781484233658. For more
detailed information, please visit www.apress.com/source-code.
Printed on acid-free paper
is is for Alexander and Henry who are both going to learn programming soon.
If their amazing expertise with Minecraft is anything to go by,
they will be brilliant at it.
—Ivor Horton
For my wonderful family. For all your love and support. For putting up with
me never having the time to help out around the house or to play
with the train set I got you for Christmas.
—Peter Van Weert
v
Contents
About the Authors �������������������������������������������������������������������������������������������������xxiii
About the Technical Reviewer �������������������������������������������������������������������������������xxv
Introduction ���������������������������������������������������������������������������������������������������������xxvii
■Chapter 1: Basic Ideas ������������������������������������������������������������������������������������������� 1
Modern C++ ��������������������������������������������������������������������������������������������������������������������� 1
Standard Libraries ������������������������������������������������������������������������������������������������������������ 2
C++ Program Concepts ���������������������������������������������������������������������������������������������������� 3
Source Files and Header Files ���������������������������������������������������������������������������������������������������������������� 3
Comments and Whitespace �������������������������������������������������������������������������������������������������������������������� 4
Preprocessing Directives and Standard Library Headers ����������������������������������������������������������������������� 4
Functions ������������������������������������������������������������������������������������������������������������������������������������������������ 5
Statements ��������������������������������������������������������������������������������������������������������������������������������������������� 5
Data Input and Output����������������������������������������������������������������������������������������������������������������������������� 6
return Statements����������������������������������������������������������������������������������������������������������������������������������� 7
Namespaces ������������������������������������������������������������������������������������������������������������������������������������������� 7
Names and Keywords �����������������������������������������������������������������������������������������������������������������������������8
Classes and Objects ��������������������������������������������������������������������������������������������������������� 9
Templates ������������������������������������������������������������������������������������������������������������������������� 9
Code Appearance and Programming Style ����������������������������������������������������������������������� 9
Creating an Executable �������������������������������������������������������������������������������������������������� 10
Procedural and Object-Oriented Programming �������������������������������������������������������������� 12