1. Introduction to C++
A-An Overview of C++
An Overview of C++The C++ Programming LanguageHello WorldSource CodeProgram MechanicsThe Build Process
B-The C++ Back Story
Early ComputingMachine LanguageHigh-Level LanguagesThe C LanguageObject-Oriented ProgrammingThe C++ Language
C-Syntax Basics
C++ SyntaxThe f2c ProgramThe Standard C++ LibraryThe main FunctionThe convert Function
D-Variables & Values
VariablesDefinitions & TypesIdentifiers & ConstantsInitializationAssignmentConsole OutputConsole Input
E-Numbers & Calculations
IntegersSigned & UnsignedInteger LiteralsFloating-point NumbersFloating-point OutputExpressionsExpression Evaluation
2. Functions, Decisions & Strings
A-Side-Effect Operators
Integer Division & RemaindersAssignment OperatorsIncrement and DecrementMixed-type ExpressionsType CastsFunctionsThe <cmath > Header
B-Functions & Decomposition
Writing FunctionsFunction SyntaxThe Function BodyFunctional DecompositionDeclaring & Defining
C-Making Decisions
Making DecisionsBlocks, Style & IndentationThe bool Data TypeThe Relational OperatorrsThe Logical OperatorsMulti-way BranchingNested if Statements
D-C++ Strings
Creating String ObjectString Input and OutputConcatenation & ComparisonMutability & Value AssignmentMember Functions
E-Processing Strings
String MembersCharactersSelecting CharactersSubstringsSearching a String
3. Programming with Loops
A-Reference Types
ReferencesConversions & Const-refReference ParametersString Value ParametersString Reference Parameters
B-Introducing Loops
Introducing LoopsGuarded & Unguarded LoopsClassifying LoopsIndefinite Loop CategoriesRange-based Loops
C-Definite Loops with For
Definite Loops with forSequences & Symmetric BoundsProcessing StringsSome Bad HabitsHands On: Counting VowelsHands On: Counting SubstringsMore Efficient SubstringsSubstrings Redux
D-How to Write Loops
Goal, Bounds & PlanImplement the PlanThe Loop BoundsThe Bounds PreconditionAdvancing the LoopThe Loop GoalLoop OperationsThe Loop PostconditionLoop GuardsNecessary & Intentional
E-Sentinel Loop Patterns
Sentinel Loop PattersThe Primed Loop PatternThe Loop-and-a-half PatternThe Flag-controlled PatternValidating Data
4. Function Libraries
A-Library Mechanics
Library MechanicsSeparate CompilationThe Client or Test ProgramThe Interface or Header FileAdding the PrototypesLibrary Types in InterfacesThe Implementation FileStubbing the ImplementationThe Make File
B-Documentation & Implementation
Documenting the InterfacePlanning & ImplementationThe while LoopLimit BoundsRunning Doxygen
C-Overloading & Default Arguments
Overloaded FunctionsOverload ResolutionDefault ArgumentsDefault Argument Rules
D-Data Flows
Data FlowsOutput ParametersInput and Output ParametersInput-Output ParametersData Flow Checklists
E-More Selections & Iteration
More Selections & IterationThe switch StatementMore on switchThe Conditional OperatorA Hasty LoopConfirmation Loops
5. Recursion, Streams & Filters
A-Introducing Recursion
Introducing RecursionThe Factorial FunctionA Recursive ExampleThe Recursive Leap of FaithThe Fibonacci SequenceRecursive Efficiency
B-Efficient Recursion
Efficient RecursionWrappers & HelpersChecking PalindromesPalindrome Efficiency
C-Applying Recursion
A Recursion Checklist IA Recursion Checklist IICode Step-by-StepSolving the Problem ISolving the Problem II
D-Streams & Redirection
The Standard StreamsThe cat FilterInput RedirectionOutput RedirectionError RedirectionPipes & PipelinesBuilt-in Filters
E-Filters
Process FiltersState FiltersYour First FilterData LoopsMore on Streams
6. Files, String Streams & Errors
A-Processing Files
The Stream ClassesUML DiagramsEasy File I/OProcessing LinesProcessing Tokens
B-Validating Data
Applied File I/OStub the FunctionSearching & NumberingValidating Data
C-String Streams
String StreamsThe format FunctionInput String StreamsAn Input Stream ExerciseThe ArgumentsThe Longest LineCounting the LinesProcessing the Tokens
D-Conditional Compilation
Conversion FunctionsUsing the FunctionsStub the ReplacementsUsing #defineConditional CompilationPredefined SymbolsComparing the Results
E-Errors & Assertions
Handling ErrorsThe TerminatorUsing assertMore AssertionsCompletion CodesError Flags
7. Exceptions, Templates & Structures
A-Exception Handling
Exception HandlingThrowing ExceptionsWhat Should You Throw?The try and catch BlocksOther catch Blocks
B-Templates
The to_string FunctionsFunction TemplatesTemplate InstantiationTemplate Argument DeductionMultiple Template ArgumentsExplicit Template ArgumentsInferred Return TypesTemplates & Overloading
C-Structured Types
Structured TypesStructure DefinitionsStructure VariablesInitializationMember AccessAggregate Operations
D-Structures & Functions
Structure ArgumentsBy-Value or By-ReferenceA Compare FunctionReturning StructuresStructured Bindings
E-Enumerated Types
Enumerated TypesDefining Enumerated TypesEnumerated VariablesEnumerated OutputEnumerated Input
8. Vectors, Memory, Pointers & Graphics
A-The vector Type
Why Vectors?Meet the vectorVector VariablesVector InitializationElement AccessRange Checking
B-Processing Vectors
Growing & ShrinkingVectors & LoopsCommon AlgorithmsCounting AlgorithmsCumulative AlgorithmsExtreme ValuesModifying AlgorithmsFilling & ShufflingVectors & Functions
C-Memory & Addresses
Memory & AddressesNaming ConceptsGlobal VariablesLocal VariablesCharacteristics of VariablesThe sizeof OperatorThe Address Operator
D-Pointers
PointersDefining PointersInitializing PointersDereferencing PointersPointer AssignmentThe "null" Pointer
E-Pointers & Graphics
Digital ImagesRGB ColorsThe RGB ExplorerDigital Images in C++Loading an ImageMore on Loading an ImageSaving an ImageChanging the Format
9. Pointers, Arrays & Algorithms
A-Image Filters
Digital FiltersAddress ArithmeticIterator LoopsThe Darken FilterDealing with ChannelsState FiltersPointers & StructuresUsing reinterpret_cast
B-Introducing Arrays
Introducing ArraysArray vs. vectorDefining ArraysArray InitializationThe Allocated SizeArray SelectionCharacteristics of Arrays
C-Pointers, Arrays & Functions
Pointers & ArraysPointer Arithmetic & ArraysDereferencing ArraysArrays & FunctionsDecaying ArraysArrays & Const
D-Arrays & Loops
Arrays and LoopsCounter-Controlled LoopsSentinel LoopsIterator LoopsA C++ Idiom
E-Arrays & Algorithms
Arrays and AlgorithmsCounting AlgorithmsCumulative AlgorithmsExtreme ValuesReturning a PointerReturning an IndexThe Fencepost AlgorithmA Reverse Fencepost
10. C-Strings, Partially-Filled & 2D Arrays
A-Searching Algorithms
Searching AlgorithmsThe Starter CodeThe find() FunctionLinear SearchLinear Search EfficiencyImproving Linear SearchBinary SearchImplementing Binary Search
B-Partially-Filled Arrays
An Array ExampleAppending ElementsTraversing the ArrayInserting ElementsApplying the AlgorithmRemoving ElementsRemoving Multiple Elements
C-2D Arrays
2D ArraysRow Major Order2D Array Initialization2D Arrays & Functions
D-C-Style Strings
C-Style StringsC-String BasicsArray-based C-StringsPointer-based C-StringsC++ Strings vs. C-StringsC-String AssignmentThe strncpy FunctionThe strcat FunctionsComparing C-Strings
E-Writing C-String Functions
The strlen FunctionThe strcpy FunctionThe strcmp FunctionWriting Your Own FunctionsFind FirstFind LastFind First of AnyFinding Substrings
11. Dynamic Memory & Smart Pointers
A-The Command Line
The ShellThe Command LineCommand-Line ArgumentsUsing Command-Line ArgumentsTraversing the ArgumentsConverting Arguments
B-Dynamic Memory
Introducing the HeapStack vs. HeapThe new OperatorDyanmic ArraysDynamic ObjectsFreeing Memory
C-Smart Pointers
Memory ManagementMemory LeaksDangling PointersDouble DeletesSmart PointersShared PointersUnique PointersSmart Pointers & FunctionsUnique Pointers and ContainersUnique Pointers and Dynamic Arrays
D-The Problem with Structures
The Iron AgeUser-Defined TypesObject-Based ProgrammingTime as a StructureType InvariantsA ScenarioThe Problem
E-Member Functions
Information HidingThe Public InterfaceMember FunctionsProving the InterfaceThe Implementation FileImplementing Member Functions
12. Object Based Programming with Classes
A-Objects & Classes
Introducing OOPWhat are ObjectsState and BehaviorWhat are ClassesWhat is EncapsulationReal World Encapsulation
B-Encapsulation
The Wall of AbstractionClass Definition SyntaxPublic and PrivateThe Implicit ParameterThe Pointer thisThe sum Member Function
C-Mutators & Constructors
SettersGetter & Setter PatternsConstructorsMember InitializationWorking ConstructorAssignment vs. InitializationThe Initializer List
D-More on Classes
The Working ConstructorConversion ConstructorsImplicit vs. ExplicitAssign, Copy & DestroyStatic Data MembersStatic Member Functionsstatic const Data Members
E-Inheritance
ClassificationInheritancePerson <- StudentThe UML DiagramInherited MembersPrivate Base-class Members
13. Inheritance & Polymorphism
A-Derived Constructors
Base-class ConstructorsDerived-class ConstructorsConstructor ChainingDefault ConstructorsCalling the Base ConstructorProtected Members
B-Overriding Functions
Virtual Member FunctionsImplementing toString()Overriding toString()Implementing Student::toString()Combining toString()The override KeywordThe Stream Class HierarchyStream SubstitutabilitySubstitution vs. Conversion
C-Polymorphism
Class RelationshipsPolymorphic InheritanceStatic PolymorphismA Perplexing ProblemThe Slicing ProblemReferences & PointersPolymorphic FunctionsPolymorphic ListsPointers to the Rescue?Maybe Smart Pointers
D-Class Relationships
Early & Late BindingHow Late Binding WorksMultiple InheritanceContractionPrivate InheritanceComposition
E-Specification Inheritance
Specification InheritanceAbstract ClassesCreating an Abstract ClassUsing an Abstract ClassA Triangle ExampleRedefining FunctionsFinal Classes