COMP-446-Notes - Software Development with C Lecture Notes...

Info icon This preview shows pages 1–6. Sign up to view the full content.

View Full Document Right Arrow Icon
Software Development with C ++ Lecture Notes Peter Grogono These notes may be copied for students who are taking either of these courses: COMP 6441 Advanced Programming Practices COMP 446 Designing Programs with C++ . © Peter Grogono, 2005 Department of Computer Science and Software Engineering Concordia University, Montreal, Quebec
Image of page 1

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full Document Right Arrow Icon
CONTENTS ii Contents 1 Getting Started 1 1.1 Hello, world! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Compiling C ++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2.1 The compilation process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2.2 Compiling with Visual C ++ .NET . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.2.3 Compiling with gcc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.3 Hello, world! — The Details . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.4 Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.5 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.6 A Pretty Frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2 Testing and Looping 17 2.1 Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.2 Conditional Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.3 Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.4 Example: Computing the Frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.5 Counting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.6 Loop Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.6.1 Counting Lines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.6.2 Finding Roots by Bisection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.6.3 Maximum Subsequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.7 Assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.8 Oh Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3 Batches of Data 36 3.1 Lvalues and Rvalues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.2 Passing Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.3 Reading Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.4 Reading from a file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 3.4.1 Writing to a file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.4.2 Stream States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 3.4.3 Summary of file streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3.5 Storing Data: STL Containers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 3.5.1 Summary of STL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Image of page 2
CONTENTS iii 4 Application: Grading a class 54 4.1 Problem Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.2 First version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.3 Program Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 4.3.1 Header Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 4.3.2 Implementation Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 4.4 Structuring the grading program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 4.4.1 Translation unit Student . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 4.4.2 Translation unit median . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 4.4.3 Translation unit for the main program . . . . . . . . . . . . . . . . . . . . . . 65 4.5 Dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 4.6 Strings and characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 5 Pointers and Iterators 72 5.1 Pointers and Dynamic Allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 5.1.1 Stack Allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 5.1.2 Heap Allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 5.1.3 A note on null pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 5.2 Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 5.2.1 Kinds of iterator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 5.2.2 Using iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 5.2.3 Range Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 6 Template Programming 84 6.1 Template functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 6.1.1 Type Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 6.1.2 Missing functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 6.1.3 Conversion failure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 6.1.4 Non-type Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 6.2 Template classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 6.2.1 A template class for vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 6.2.2 class or typename ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 6.3 Complications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 6.3.1 Compiling template code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Image of page 3

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full Document Right Arrow Icon
CONTENTS iv 6.3.2 Template return types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 6.3.3 Template Specialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 6.3.4 Default Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 6.4 Tree traversal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 6.4.1 Organizing the code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 7 Designing classes 109 7.1 Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 7.2 Destructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 7.3 Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 7.3.1 Assignment ( operator= ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 7.3.2 Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 7.3.3 Comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 7.3.4 Input and output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 7.4 Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 7.5 Accessors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 7.6 Mutators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 7.7 Odds and ends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 7.7.1 Indexing ( operator[] ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 7.7.2 Calling ( operator() ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 7.7.3 Explicit constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 7.7.4 Friends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 8 Inheritance and templates 134 8.1 What is inheritance? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 8.1.1 Slicing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 8.1.2 Constructors and destructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 8.2 Designing a base class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 8.2.1 virtual functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 8.2.2 Don’t redefine non-virtual functions . . . . . . . . . . . . . . . . . . . . . . . 142 8.2.3 protected attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 8.2.4 A base class for bankers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 8.3 Designing a derived class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 8.3.1 A derived class for bankers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 8.3.2 Additional base class functions . . . . . . . . . . . . . . . . . . . . . . . . . . 150 8.4 Designing a template class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 8.5 Note on iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Image of page 4
CONTENTS v 9 When things go wrong 161 9.1 Design by contract versus defensive coding . . . . . . . . . . . . . . . . . . . . . . . 161 9.2 Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 9.3 Managing failure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 9.3.1 Error messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 9.3.2 Error codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 9.3.3 Special return values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 9.3.4 Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 9.4 Exception-safe Coding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 10 System Design 171 10.1 Logical and physical design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Image of page 5

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full Document Right Arrow Icon
Image of page 6
This is the end of the preview. Sign up to access the rest of the document.

{[ snackBarMessage ]}

What students are saying

  • Left Quote Icon

    As a current student on this bumpy collegiate pathway, I stumbled upon Course Hero, where I can find study resources for nearly all my courses, get online help from tutors 24/7, and even share my old projects, papers, and lecture notes with other students.

    Student Picture

    Kiran Temple University Fox School of Business ‘17, Course Hero Intern

  • Left Quote Icon

    I cannot even describe how much Course Hero helped me this summer. It’s truly become something I can always rely on and help me. In the end, I was not only able to survive summer classes, but I was able to thrive thanks to Course Hero.

    Student Picture

    Dana University of Pennsylvania ‘17, Course Hero Intern

  • Left Quote Icon

    The ability to access any university’s resources through Course Hero proved invaluable in my case. I was behind on Tulane coursework and actually used UCLA’s materials to help me move forward and get everything together on time.

    Student Picture

    Jill Tulane University ‘16, Course Hero Intern