S1: Overview of C++
Copyright: S. Shekhar, C. S. Dept., University of Minnesota, Minneapolis, MN 55455. Csci,3321,Winter.(home)
S2: Program Organization in C++
  • As in C, a C++ program is spread over multiple files
    • Header files for declarations
      • < iostream.h > , "Tree.h"
    • Source files - suffix compiler dependent: .C, .cpp, ...
      • #include preprocessor directive to include header files
    • Implications of multiple files
    • Tedious 3-Steps process: (i) individually compile source files,
      • (ii) link object files (iii) load and run
      • Recommendation: Use "make" utility
    • Another problem with multiple files
    • What if a header files is included multiple times?
    • How to avoid compilation error
      #ifndef FILENAME_H
      #define FILENAME_H
      // insert contents of the header file here
      #include "filename.h"
      #endif
Copyright: S. Shekhar, C. S. Dept., University of Minnesota, Minneapolis, MN 55455. Csci,3321,Winter.(home)
S3: C++ Statements, Operators, Comments
  • C++ Statements: Same syntax and semantics as in C
    • Simple: null, break, continue, goto
    • Conditionals: if, switch
    • Loops: for, while, do-while
  • For Review: See Ch# 2 (Slides from Superconductor ... Lab)
    • available from WWW & TA-account
    • C++ Operators identical to C operators, except
    • new, delete for memory management
    • stream I/O using << , >>
    • C++ allows operator OVERLOADING
      • i.e. an operator may have multiple meanings
    • Comments in C++
    • Has C-like Multiline comments: delimited by /* and */
      • Problem with C comments: No nesting
        /* code1 /* comment */ code2 */ is not all comments!
    • C++ adds Single line comments
      • all text after // is ignored by compiler
Copyright: S. Shekhar, C. S. Dept., University of Minnesota, Minneapolis, MN 55455. Csci,3321,Winter.(home)
S4: Exercises
  • Consider the following program:
    #include < stdio.h >
    int main(void)
    {
    int language = 1 //**/ 2
    ; /* Semicolon by itself */
    }
  • Q? What is the value of language if a C compiler is used?
  • Q? What is the value of language if a C++ compiler is used?
Copyright: S. Shekhar, C. S. Dept., University of Minnesota, Minneapolis, MN 55455. Csci,3321,Winter.(home)
S5: Reducing Safety Hazards
  • Q? Which features of C are most error prone?
  • Inadequate type-checking, Few types
    int x = 5; If (0 < x < 2) printf "Do I know boolean type?";
  • Overuse of Pointers = > Efficient but UNSAFE
    • Ex. Identify problems with the following C-codes:
      void main(){
      int a[10], b, c; char *greetings ;
      scanf( "%d %d", b, c ); /* input */
      a[10] = 100 ; /* array indices are non-intuitive */
      greetings = "Hello"; /*strings are 2nd class citizen */
      swap(&a, &b); /* Pointer Parameter */
      }
      void swap(int *x, int *y) { int *z; *z = *x; *x = *y; *y = *z;}
  • C++ = > safety with efficiency = > reduce pointer usage
    void main(){
    int b, c; cin >> b >> c; // typesafe input
    String greetings = "Hello" + " There" ; //safe strings
    Array < int > a(1,10); a[10] = 100; // safe arrays (not standard yet)
    swap(&a, &b); // Intuitive Reference Parameter
    }
    void swap(int& x, int& y) { int z; z = x; x = y; y = z; }
Copyright: S. Shekhar, C. S. Dept., University of Minnesota, Minneapolis, MN 55455. Csci,3321,Winter.(home)
S6: Data Declaration in C++
  • FOR DETAILS: See Chapter 2 of the textbook and
    • Ch# 1 (Superconductor ... Lab slides) at ta-account
  • Data declaration need not be at the start of block!
  • Constants and Variables
    • Constant Values: 5, 'a', 4.3
    • Variables
    • Constant variables : value can't change after initialization
      Sum(const int SIZE) // fixed parameter
  • Enumeration type: enum Boolean { FALSE, TRUE };
    • Like Pascal, FALSE and TRUE are integers 0 and 1.
  • Pointers hold memory address
    int i=25; int *np; np = &i;
  • REFERENCE type: Alias = provide another name for an object
    int i = 5; int& j=i; i=7; cout << j; //prints 7
  • Structure types: arrays, struct and class
    • arrays can be initialized
    • class and struct can include functions!
      • Default visibilities are different
      • Data abstraction and OOP features
Copyright: S. Shekhar, C. S. Dept., University of Minnesota, Minneapolis, MN 55455. Csci,3321,Winter.(home)
S7: Input / Output in C++ : IOstreams
  • Overview
    • #include < iostream.h > , cin, cout, cerr, << , >>
    • format-free, << and >> and be overloaded
  • cout : stdout output device (terminal or file)
    • << operator separates entities from each other and keyword
      int n = 50; cout << "n = " << n << endl;// Prints n = 50
  • cin : stdin input device (terminal or file)
    • >> operator separates entities from each other and keyword
      int a, b; cin >> a >> b;// read a then b
  • Formats - stream manipulators - endl, ws, setw, setprecision, ...
    cout << endl ; // write newline and flush output stream
    cin << ws ; // remove whitespace - space, tab, newline
    cout << setprecision( 3 ) ;// floating-point precision = 3 digits
    cout << setw( 5 ) ;// field width = 5
    cout << "i = " << hex << 91 << endl ;// outputs i = 5b
  • File I/O : fstream.h, ofstream
    #include < fstream.h >
    ...
    ofstream outFile("my.out", ios::out); // open file to output
    outFile << "Hello there"; // use outFile instead of cout
Copyright: S. Shekhar, C. S. Dept., University of Minnesota, Minneapolis, MN 55455. Csci,3321,Winter.(home)
S8: Functions in C++
  • Details in Ch# 3 (Superconductor ... Lab) at ta-account
  • Two kinds : regular functions, member functions
    • member functions are part of a "class"
  • Parameter Passing
    • By Value (like C) - copy value
    • By Reference (like Pascal) - copy address (share storage)
      int max( int par1, int& par2, const int& par2)
      //par1 - value copied, function can't change actual parameter
      //par2 - share storage, actual can be changed
      //par3 - share storage, actual can't be changed
    • Array are passed by Reference like C
  • Functions Name Overloading
    • Conflict resolved by number/types of arguments/result
      int max(int, int);
      int max(float, int);
  • Inline Functions
    inline int sum( int a, int b) { return a+b; }
Copyright: S. Shekhar, C. S. Dept., University of Minnesota, Minneapolis, MN 55455. Csci,3321,Winter.(home)
S9: Scope in C++
  • Four delimiters - block, function, file, class
    • Block: hierarchical unit
    • Function: labels have function scope
    • Files for names declared outside functions and Classes
      • extern - import variables from other files
      • static - allow 2 global vars in two files to have same name
    • :: operator - Absolute names
    • Designate member function
    • avoid hole-in-the scope in nested blocks
  • CLASS: declaration associated with class
    const float PI = 3.14152;
    class Circle { float radius;
    float Area(void) const; // function prototype
    }
    float Circle::Area(void) const { // member function
    return PI * radius * radius; // radius from class Circle
    }
    • Classes can span multiple files: circle.h, circle.C
  • For Details: See Ch# 3 in the textbook
    • and Ch# 3 (Superconductor ... Lab slides) at ta-account
Copyright: S. Shekhar, C. S. Dept., University of Minnesota, Minneapolis, MN 55455. Csci,3321,Winter.(home)
S10: Memory Management
  • For Details: See Ch# 8 in the textbook
    • and Ch# 3 (Superconductor ... Lab slides) at ta-account
  • Q? How did we allocate/deallocate memory in C?
  • Operators "new" and "delete"
    • new: create object and return pointer or 0
    • delete: destroy object pointed to
  • Example
    int *ip = new int; if (ip == 0) cerr << "memory problems" << endl;
    int *jp = new int[10];
    if (jp == 0) cerr << "memory problems" << endl;
    delete ip; // delete an object
    delete [] jp; // delete an array
Copyright: S. Shekhar, C. S. Dept., University of Minnesota, Minneapolis, MN 55455. Csci,3321,Winter.(home)

The views and opinions expressed in this page are strictly those of the page author.
The contents of this page have not been reviewed or approved by the University of Minnesota.