Lecture notes for CS 503, Advanced Programming I

Advanced Programming I Lecture Notes

18 January 2007 • C++ Review


Outline

Pointers

Pointers and Values

Pointer Operations

Pointer Dereferencing

Pointer Assignment

Pointer Comparison

Pointer Arithmetic

Pointer Subtraction

Dynamic Storage

Dynamically-Allocated Storage

Freeing Dynamic Storage

Freeing Rules

Classes and Pointers

Garbage is Born

Class Destructor

Unintentional Sharing

Unintentional Sharing Example

Class Instance Copying

The Copy Constructor

Copy Constructor Example

Class Instance Assignment

Instance Assignment Example

struct C {
  data * p;
  C() : p(new data) { }
  C(const C & c) 
    : p(data_clone(c.p)) {}
 ~C() { delete p; }
  };

static void t(C & c) { C c2; c2 = c; }

Instance Assignment Problems

The Assignment Operator

Assignment Operator Example

struct C {
  data * data_ptr;
  C() : data_ptr(new data) { }
  C(const C & c) : data_ptr(data_clone(c.data_ptr)) {}
 ~C() { delete data_ptr; }

  // Bad example.
  C & operator = (const C & c) {
    delete data_ptr;
    data_ptr = data_clone(c.data_ptr);
    return *this;
    }
  };

Refining Assignment

The Self-Assignment Problem

Self-Assignment Example

C & C::operator = (const C & rhs) {
  delete data_ptr;
  data_ptr = copy_data(rhs.data_ptr);
  return *this;
  }

Detecting Self-Assignment

Assignments as Expressions

Assignment Expressions

Assignment Return

Assignment and Copying

Assignment vs. Copying

The Rule of Three

Stream I-O

Stream Structure

Stream Parts

Stream Types

Stream Output Operations

Stream States

Stream Predicates

The EOS Stream State

EOS Example

State Test Operators

Streams as Booleans

Implicit vs. Explicit Tests

Formatted I-O Operators

Cascaded Stream Operations

Data Type Formats

File Streams

Opening File Streams

Closing Streams

String Streams

String Stream Operations

Arrays

Array Operations

Array Size

Arrays and Pointers

Multidimensional Arrays

Points to Remember


This page last modified on 25 July 2006.

This work is covered by a
Creative Commons License.