final exam review - texas a&m...

21
Review for Final Exam Chapters 120 (―Programming and C++ in 75 minutes‖) Bjarne Stroustrup Ronnie Ward www.stroustrup.com/Programming 1 Stroustrup/PPP - April 2010

Upload: lyanh

Post on 06-Mar-2018

214 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Final exam review - Texas A&M Universitycourses.cs.tamu.edu/ward/112.spr10/Review-for-Final.pdf · Review for Final Exam Chapters 1–20 ... Stroustrup/PPP - April 2010 11. Chapter

Review for Final Exam

Chapters 1–20(―Programming and C++ in 75 minutes‖)

Bjarne Stroustrup

Ronnie Wardwww.stroustrup.com/Programming

1Stroustrup/PPP - April 2010

Page 2: Final exam review - Texas A&M Universitycourses.cs.tamu.edu/ward/112.spr10/Review-for-Final.pdf · Review for Final Exam Chapters 1–20 ... Stroustrup/PPP - April 2010 11. Chapter

3

The Aims

Teach/learn Fundamental programming concepts

Key useful techniques

Basic Standard C++ facilities

After the course, you’ll be able to Write small colloquial C++ programs

Read much larger programs

Learn the basics of many other languages by yourself

Proceed with an ―advanced‖ C++ programming course

After the course, you will not (yet) be An expert programmer

A C++ language expert

An expert user of advanced libraries

3Stroustrup/PPP - April 2010

Page 3: Final exam review - Texas A&M Universitycourses.cs.tamu.edu/ward/112.spr10/Review-for-Final.pdf · Review for Final Exam Chapters 1–20 ... Stroustrup/PPP - April 2010 11. Chapter

Chapter 1-2 Programming

Why C++?

Why software?

Where is C++ used?

Hello World program

Computation & Linking

What is programming?

Integrated Development

Environment

#include "std_lib_facilities.h " //header

int main() // where a C++ programs start

{

cout << "Hello, world\n";// output

keep_window_open(); // wait

return 0; // return success

}

4Stroustrup/PPP - April 2010

Page 4: Final exam review - Texas A&M Universitycourses.cs.tamu.edu/ward/112.spr10/Review-for-Final.pdf · Review for Final Exam Chapters 1–20 ... Stroustrup/PPP - April 2010 11. Chapter

Chapter 3 Types

Builtin types: int, double, bool, char

Library types: string, complex

Input and output

Operators—―overloading‖

Variable names in C++

Simple computations

Literals

Declaration & initialization

Type safety

Programming philosophy

// inch to cm and cm to inch conversion:

int main()

{

const double cm_per_inch = 2.54;

int val;

char unit;

while (cin >> val >> unit) {// keep reading

if (unit == 'i') // 'i' for inch

cout << val << "in == “

<< val*cm_per_inch << "cm\n";

else if (unit == 'c') // 'c' for cm

cout << val << "cm == " << val/cm_per_inch << "in\n";

else

return 0; // terminate on a “bad // unit”, e.g. 'q'

}

}5Stroustrup/PPP - April 2010

Page 5: Final exam review - Texas A&M Universitycourses.cs.tamu.edu/ward/112.spr10/Review-for-Final.pdf · Review for Final Exam Chapters 1–20 ... Stroustrup/PPP - April 2010 11. Chapter

Chapter 4 Computation

Expressing computations Correctly, simply, efficiently

Divide and conquer

Use abstractions

Organizing data, vector

Language features Expressions

Boolean operators (e.g. ||)

Short cut operators (e.g. +=)

Statements

Control flow

Functions

Algorithms

// Eliminate the duplicate words; copying unique words

vector<string> words;

string s;

while (cin>>s && s!= "quit") words.push_back(s);

sort(words.begin(), words.end());

vector<string>w2;

if (0<words.size()) {w2.push_back(words[0]);

for (int i=1; i<words.size(); ++i)

if(words[i-1]!=words[i])

w2.push_back(words[i]);

}

cout<< "found " << words.size()-w2.size()

<< " duplicates\n";

for (int i=0; i<w2.size(); ++i)

cout << w2[i] << "\n";

6Stroustrup/PPP - April 2010

Page 6: Final exam review - Texas A&M Universitycourses.cs.tamu.edu/ward/112.spr10/Review-for-Final.pdf · Review for Final Exam Chapters 1–20 ... Stroustrup/PPP - April 2010 11. Chapter

Chapter 5 Errors

Errors (―bugs‖) are unavoidable in programming

Sources of errors?

Kinds of errors?

Minimize errors

Organize code and data

Debugging

Testing

Do error checking and produce reasonable messages

Input data validation

Function arguments

Pre/post conditions

Exceptions– error()

int main()

{

try

{

// …

}

catch (out_of_range&) {cerr << "oops – some vector "

" index out of range\n";

}

catch (…) {

cerr << "oops – some exception\n";

}

return 0;

}

7Stroustrup/PPP - April 2010

Page 7: Final exam review - Texas A&M Universitycourses.cs.tamu.edu/ward/112.spr10/Review-for-Final.pdf · Review for Final Exam Chapters 1–20 ... Stroustrup/PPP - April 2010 11. Chapter

Chapter 6 Writing a Program

Program a simple desk calculator

Process of repeatedly analyzing, designing, and implementing

Strategy: start small and continually improve the code

Use pseudo coding

Leverage prior work

Expression Grammar

Functions for parsing

Token type

Program organization Who calls who?

Importance of feedback

double primary() // Num or „(„ Expr „)‟

{

Token t = get_token();

switch (t.kind) {

case '(': // handle „(‟expression „)‟

{ double d = expression();

t = get_token();

if (t.kind != ')') error("')' expected");

return d;

}

case '8': // „8‟ represents number “kind”

return t.value; // return value

default:

error("primary expected");

}

}

8Stroustrup/PPP - April 2010

Page 8: Final exam review - Texas A&M Universitycourses.cs.tamu.edu/ward/112.spr10/Review-for-Final.pdf · Review for Final Exam Chapters 1–20 ... Stroustrup/PPP - April 2010 11. Chapter

Chapter 7 Completing a Program

Token type definition

Data members

Constructors

Token_stream type

definition

Function members

Streams concept

―Grow‖ functionality: eg.

prompts, and error recovery

Eliminate ―magic‖ constants

class Token_stream {

bool full; // is there a Token in the buffer?

Token buffer; // here is where we keep a Token

public:

Token get(); // get a Token

void putback(Token); // put back a Token

// the buffer starts empty:

Token_stream() :full(false), buffer(0) { }

};

void Token_stream::putback(Token t)

{

if (full) error("putback() into a full buffer");

buffer=t;

full=true;

}

9Stroustrup/PPP - April 2010

Page 9: Final exam review - Texas A&M Universitycourses.cs.tamu.edu/ward/112.spr10/Review-for-Final.pdf · Review for Final Exam Chapters 1–20 ... Stroustrup/PPP - April 2010 11. Chapter

Chapter 8 Functions

Declarations and definitions

Headers and the preprocessor

Scope

Functions

Call by value,

by reference, and

by const reference

Namespaces Qualification with :: and using

namespace Jack {// in Jack‟s header file

class Glob{ /*…*/ };

class Widget{ /*…*/ };

}

#include "jack.h"; // this is in your code

#include "jill.h"; // so is this

void my_func(Jack::Widget p)

{ // OK, Jack‟s Widget class will not

// clash with a different Widget

// …

}

10Stroustrup/PPP - April 2010

Page 10: Final exam review - Texas A&M Universitycourses.cs.tamu.edu/ward/112.spr10/Review-for-Final.pdf · Review for Final Exam Chapters 1–20 ... Stroustrup/PPP - April 2010 11. Chapter

Chapter 9 Classes

User defined types

class and struct

private and public members

Interface

const members

constructors/destructor

operator overloading

Helper functions

Enumerations enum

Date type

// simple Date (use Month type)

class Date {

public:

enum Month {

jan=1, feb, mar, apr, may, jun, jul,

aug, sep, oct, nov, dec

};

Date(int y, Month m, int d); // check for valid // date and initialize

// …

private:

int y; // year

Month m;

int d; // day

};

Date my_birthday(1950, 30, Date::dec); // error: // 2nd argument not a Month11Stroustrup/PPP - April 2010

Page 11: Final exam review - Texas A&M Universitycourses.cs.tamu.edu/ward/112.spr10/Review-for-Final.pdf · Review for Final Exam Chapters 1–20 ... Stroustrup/PPP - April 2010 11. Chapter

Chapter 10 Streams

Devices, device drivers, libraries, our code

The stream model, type safety, buffering

operators << and >>

File types Opening for input/output

Error handling check the stream state

Code logically separate actions as individual functions

Parameterize functions

Defining >> for Date type

struct Reading { // a temperature reading

int hour; // hour after midnight [0:23]

double temperature;

Reading(int h, double t) :hour(h), temperature(t) { }

};

string name;

cin >> name;

ifstream ist(name.c_str());

vector<Reading> temps; // vector of readings

int hour;

double temperature;

while (ist >> hour >> temperature) { // read

if (hour < 0 || 23 <hour)

error("hour out of range");

temps.push_back( Reading(hour,temperature) ); // store

}12Stroustrup/PPP - April 2010

Page 12: Final exam review - Texas A&M Universitycourses.cs.tamu.edu/ward/112.spr10/Review-for-Final.pdf · Review for Final Exam Chapters 1–20 ... Stroustrup/PPP - April 2010 11. Chapter

Chapter 11 Customizing I/O

Formatted output—manipulators for int and double

File open modes

Text vs binary files

Positioning in a filestream

stringstreams

Line and char input/output

Character classification functions

double str_to_double(string s)

// if possible, convert characters

// in s to floating-point value

{

istringstream is(s); // make a stream double d;

is >> d;

if (!is) error("double format error");

return d;

}

double d1 = str_to_double("12.4"); // testing

double d2 = str_to_double("1.34e-3");

// will call error():

double d3 = str_to_double("twelve point four");

13Stroustrup/PPP - April 2010

Page 13: Final exam review - Texas A&M Universitycourses.cs.tamu.edu/ward/112.spr10/Review-for-Final.pdf · Review for Final Exam Chapters 1–20 ... Stroustrup/PPP - April 2010 11. Chapter

Chapter 12 Graphics

Why Graphics/GUI?

WYSIWYG

Display model Create a Window

Create Shapes

Attach objects

Draw

2D Graphics/GUI library FLTK

Layered architecture

Interface classes

int main()

{

using namespace Graph_lib; // use graph library

Point tl(100,200); // a point (obviously)

Simple_window win(tl,600,400,"Canvas"); Polygon poly; // make a polygon shape

poly.add(Point(300,200)); // add three points

poly.add(Point(350,100));

poly.add(Point(400,200));

poly.set_color(Color::red); // make it red

win.attach(poly); // connect poly to the window

win.wait_for_button(); // give up control

}

Window

Simple_window

Shape

Lines Polygon Rectangle Text

Point

Color Line_style

Line … 14Stroustrup/PPP - April 2010

Page 14: Final exam review - Texas A&M Universitycourses.cs.tamu.edu/ward/112.spr10/Review-for-Final.pdf · Review for Final Exam Chapters 1–20 ... Stroustrup/PPP - April 2010 11. Chapter

Chapter 13 Graphics Classes

Code organization

Implementation of Point, Line,Color, Line_style, Polylines, Text, etc.

Object-oriented programming

Simple_window win20(pt,600,400,"16*16 color matrix");

Vector_ref<Rectangle> vr; // use like vector

// but imagine that it holds references to objects

for (int i = 0; i<16; ++i) { // i is the horizontal

// coordinate

for (int j = 0; j<16; ++j) { // j is the vertical

// coordinate

vr.push_back(

new Rectangle( Point(i*20,j*20),20,20)

);

vr[vr.size()-1].set_fill_color(i*16+j);

win20.attach(vr[vr.size()-1]);

}

// Graphing interface:

struct Point { … };

// window interface:

class Window {…};

FLTK headers

Graph codeWindow code

FLTK code

chapter12.cp

p:

Window.

h:

Window.c

pp:

#include "Graph.h"

#include "Window.h"

int main() { … }

Graph.cpp

:

Graph.

h:

struct Point { … };

// GUI interface:

struct In_box { … };

GUI code

GUI.cp

p:

15Stroustrup/PPP - April 2010

Page 15: Final exam review - Texas A&M Universitycourses.cs.tamu.edu/ward/112.spr10/Review-for-Final.pdf · Review for Final Exam Chapters 1–20 ... Stroustrup/PPP - April 2010 11. Chapter

Chapter 14: Design Principles for

Programming a Class Library

Implement types used in the application domain

Derived classes inherit from a few key abstractions

Provide a minimum number of operations, access functions

Use a consistent, regular style, appropriate naming

Expose the interface only encapsulation

Virtual functions dynamic dispatching

void Shape::draw() const

// The real heart of class Shape

// called by Window (only)

{

Fl_Color oldc = fl_color(); // save old color

// there is no good portable way of

// retrieving the current style (sigh!)

fl_color(line_color.as_int()); // set color and // style

fl_line_style(ls.style(),ls.width());

// call the appropriate draw_lines():

draw_lines(); // a “virtual call”

// here is what is specific for a // “derived class” is done

fl_color(oldc); // reset color to previous

fl_line_style(0);// (re)set style to default

}16Stroustrup/PPP - April 2010

Page 16: Final exam review - Texas A&M Universitycourses.cs.tamu.edu/ward/112.spr10/Review-for-Final.pdf · Review for Final Exam Chapters 1–20 ... Stroustrup/PPP - April 2010 11. Chapter

Chapter 15 Graphing

Graphing functions

Labeling, use of color

Scaling

typedef

Standard mathematical

functions

Function approximation

Rounding errors

Graphing data

Function::Function( Fct f,double r1, double r2, //rangePoint xy, // screen location of (0, 0)int count, // number of pointsdouble xscale, // location (x,f(x)) is double yscale // (xscale*x,yscale*f(x)) )

{if (r2-r1<=0)

error("bad graphing range");if (count <=0)

error("non-positive graphing count");double dist = (r2-r1)/count;double r = r1;for (int i = 0; i<count; ++i) {

add(Point(xy.x+int(r*xscale), xy.y-int(f(r)*yscale)));

r += dist;}

}

17Stroustrup/PPP - April 2010

Page 17: Final exam review - Texas A&M Universitycourses.cs.tamu.edu/ward/112.spr10/Review-for-Final.pdf · Review for Final Exam Chapters 1–20 ... Stroustrup/PPP - April 2010 11. Chapter

Chapter 16 GUI

Graphical I/O

Layered architecture

Control inversion

Callbacks

Wait loops

Event oriented actions

Buttons

Input/output boxes

Button start_button(Point(20,20), 100, 20, "START", cb_start);

static void cb_start(Address, Address addr) { reference_to<Window>(addr).start();

}

void start(void) { start_pushed = true; }

….

void wait_for_start(void){

while (!start_pushed) Fl::wait();

start_pushed = false;

Fl::redraw();

}

….

Window win (Point(10,10), “My Window");

….

win.wait_for_start();

18Stroustrup/PPP - April 2010

Page 18: Final exam review - Texas A&M Universitycourses.cs.tamu.edu/ward/112.spr10/Review-for-Final.pdf · Review for Final Exam Chapters 1–20 ... Stroustrup/PPP - April 2010 11. Chapter

Chapter 17 Free Store

Built vector type

Pointer type

The new operator to allocate objects on the free store (heap)

Why use free store?

Run-time memory organization

Array indexing

Memory leaks

void*

Pointers vs references

class vector {

int sz; // the size

double* elem; // a pointer to the elements

public:

// constructor (allocate elements):

vector(int s) :sz(s), elem(new double[s]) { }

// destructor (deallocate elements):

~vector() { delete[ ] elem; }

// read access:

double get(int n) { return elem[n]; }

// write access:

void set(int n, double v) { elem[n]=v; }

// the current size:

int size() const { return sz; }

};

vector v(10);

for (int i=0; i<v.size(); ++i) {

v.set(i,i); cout << v.get(i) << ' ';

} 19Stroustrup/PPP - April 2010

Page 19: Final exam review - Texas A&M Universitycourses.cs.tamu.edu/ward/112.spr10/Review-for-Final.pdf · Review for Final Exam Chapters 1–20 ... Stroustrup/PPP - April 2010 11. Chapter

Chapter 18 Arrays

Vector copy constructor

Vector copy assignment

Shallow and deep copy

Arrays—avoid if possible

Overloading [ ]

i.e. defining [] for vector

class vector {

int sz; // the size

double* elem; // pointer to elements

public:

// constructor:

vector(int s) :sz(s), elem(new double[s]) { }

// …

// read and write access: return a reference:

double& operator[ ](int n) { return elem[n]; }

};

vector v(10);

for (int i=0; i<v.size(); ++i) { // works and // looks right!

v[i] = i; // v[i] returns a // reference to the ith element

cout << v[i];

}

20Stroustrup/PPP - April 2010

Page 20: Final exam review - Texas A&M Universitycourses.cs.tamu.edu/ward/112.spr10/Review-for-Final.pdf · Review for Final Exam Chapters 1–20 ... Stroustrup/PPP - April 2010 11. Chapter

Chapter 19 Vector

Changing vector size

Representation changed to include free space

Added reserve(int n),

resize(int n),

push_back(double d)

The this pointer

Optimized copy assignment

Templates

Range checking

Exception handling

// an almost real vector of Ts:

template<class T> class vector { // “for all types T” int sz; // the size

T* elem; // a pointer to the elements

int space; // size+free_space

public:

// default constructor:

vector() : sz(0), elem(0), space(0);

// constructor:

explicit vector(int s)

:sz(s), elem(new T[s]), space(s) {

// copy constructor:

vector(const vector&);

// copy assignment:

vector& operator=(const vector&);

~vector() { delete[ ] elem; } // destructor

// access: return reference

T& operator[ ] (int n) { return elem[n]; }

int size() const { return sz; } // the current size

// …

};21Stroustrup/PPP - April 2010

Page 21: Final exam review - Texas A&M Universitycourses.cs.tamu.edu/ward/112.spr10/Review-for-Final.pdf · Review for Final Exam Chapters 1–20 ... Stroustrup/PPP - April 2010 11. Chapter

Chapter 20 The STL

Generic programming ―lifting an algorithm‖

Standard Template Library

60 Algorithms sort, find, search, copy, …

vector, list, map, hash_map,…

10 Containers

iterators define a sequence

Function objects

// Concrete STL-style code for a more

// general version of summing values

template<class Iter, class T> // Iter should be an // Input_iterator

// T should be // something we can // + and =

T sum(Iter first, Iter last, T s) // T is the // “accumulator type”

{

while (first!=last) {

s = s + *first;

++first;

}

return s;

}

iterators

22Stroustrup/PPP - April 2010