Homework 3: Class ID

Classes with Dynamically Allocated Members

Educational Objectives. After successfully completing this assignment, the student should be able to accomplish the following:

Operational Objectives: Define and implement the class ID and deliver the code in two files id.h and id.cpp along with a makefile for the supplied test harness.

Deliverables: id.h, id.cpp, makefile

Background

See lecture notes Chapter 4. Classes Part 1, Chapter 5. Pointers, Chapter 6. Classes Part 2, and Chapter 7: String Objects.

Procedural Requirements:

  1. Begin as usual by creating your assignment directory and copying the distribution files for the assignment:

    cp ~cop3330p/fall12/hw3/* ~/cop3330/hw3/
    cp ~cop3330p/fall12/area51/ID*.x ~/cop3330/hw3/
    

    Then a long listing of your assignment directory should look like this:

    -rw------- 1 xxxxxxxx CS-Class   505 Sep 14 11:45 hw3submit.sh
    -rw------- 1 xxxxxxxx CS-Class 16469 Sep 14 11:46 IDtest1_i.x
    -rw------- 1 xxxxxxxx CS-Class 18188 Sep 14 11:46 IDtest1_s.x
    -rw------- 1 xxxxxxxx CS-Class 13355 Sep 14 11:46 IDtest2_i.x
    -rw------- 1 xxxxxxxx CS-Class 12216 Sep 14 11:46 IDtest2ShallowCopy_i.x
    -rw------- 1 xxxxxxxx CS-Class 13060 Sep 14 11:46 IDtest2ShallowCopy_s.x
    -rw------- 1 xxxxxxxx CS-Class 14392 Sep 14 11:46 IDtest2_s.x
    -rw------- 1 xxxxxxxx CS-Class  2030 Sep 14 11:45 test1.cpp
    -rw------- 1 xxxxxxxx CS-Class  1306 Sep 14 11:45 test2.cpp
    

    The executables are for demonstration purposes. You can erase these and get them back by copying again. After invoking "clean ." to declutter the directory and "chmod 700 hw3submit.sh" to set permissions on the submit script, a long listing should be:

    -rwx------ 1 xxxxxxxx CS-Class   505 Sep 14 11:45 hw3submit.sh
    -rw------- 1 xxxxxxxx CS-Class  2030 Sep 14 11:45 test1.cpp
    -rw------- 1 xxxxxxxx CS-Class  1306 Sep 14 11:45 test2.cpp
    

    Now continue to the next step:

  2. Create a makefile that builds executables test1.x and test2.x. Look at the #include statements in test1.cpp and test2.cpp to deduce what the intermediate targets and dependencies should be.

  3. Design the class ID, placing the definition in file id.h

  4. Implement the class ID, placing the class implementation in file id.cpp. You can test the code for syntax errors with the command "make id.o" or the command "co3330 id".

  5. Thoroughly test class ID, starting out with the supplied test harnesses in file hw3/test?.cpp using your makefile to build the executables. (Note - you could also use the command line compile scripts "co3330" to create object files and then and "g++ -otest1.x id.o test1.o" to create executables, as in Homework 1.)

  6. Turn in id.h, id.cpp, and makefile using the hw3submit.sh submit script.

    Warning: Submit scripts do not work on the program and linprog servers. Use shell.cs.fsu.edu to submit projects. If you do not receive the second confirmation with the contents of your project, there has been a malfunction.

Technical Requirements and Specifications

  1. The class should implement the following diagram:

    Class Name:
      ID
    Services : 
      void        SetName ( const char* ) // sets the name field
      void        SetAge  ( int )         // sets the age field
      const char* GetName () const        // returns a const pointer to the name field
      int         GetAge  () const        // returns the age field by value
    
    Properties : 
      Constructable: objects can be declared as ordinary variables
      Assignable:    objects can be assigned one to another
      Passable:      objects can be passed by value to and returned as values from functions  
    
    Private variables:
      char * name_  // the name field
      int    age_   // the age field
    

  2. The class should be a proper type, to include default constructor, 2-argument constructor (that initializes the two data fields), copy constructor, assignment operator, and destructor. Note that the default constructor should set the name to "#" and the age to -1.

  3. The output operator operator<< should be overloaded for the type ID.

  4. Class ID should pass testing with the supplied hw3/test?.cpp with no compile or runtime errors and no compiler warnings when the warning flags -W, -Wall, -Wextra are set.

  5. Building and running the supplied hw3/test?.cpp should result in output identical to the supplied executable area51/IDtest_?.x [? = i or s] .

Hints