1 2 // Define class GradeBook with a member function displayMessage; 3 // Create a GradeBook object and call its displayMessage function. 4 #include <iostream> 5 using std::cout; 6 using std::endl; 7 8 // GradeBook class definition 9 class GradeBook 10 { 11 public: 12 // function that displays a welcome message to the GradeBook user 13 void displayMessage() 14 { 15 cout << "Welcome to the Grade Book!" << endl; 16 } // end function displayMessage 17 }; // end class GradeBook 18 19 // function main begins program execution 20 int main() 21 { 22 GradeBook myGradeBook; // create a GradeBook object named myGradeBook 23 myGradeBook.displayMessage(); // call object's displayMessage function 24 return 0; // indicate successful termination 25 } // end main
1 2 // Define class GradeBook with a member function that takes a parameter; 3 // Create a GradeBook object and call its displayMessage function. 4 #include <iostream> 5 using std::cout; 6 using std::cin; 7 using std::endl; 8 9 #include <string> // program uses C++ standard string class 10 using std::string; 11 using std::getline; 12 13 // GradeBook class definition 14 class GradeBook 15 { 16 public: 17 // function that displays a welcome message to the GradeBook user 18 void displayMessage( string courseName ) 19 { 20 cout << "Welcome to the grade book for\n" << courseName << "!" 21 << endl; 22 } // end function displayMessage 23 }; // end class GradeBook 24 25 // function main begins program execution 26 int main() 27 { 28 string nameOfCourse; // string of characters to store the course name 29 GradeBook myGradeBook; // create a GradeBook object named myGradeBook 30 31 // prompt for and input course name 32 cout << "Please enter the course name:" << endl; 33 getline( cin, nameOfCourse ); // read a course name with blanks 34 cout << endl; // output a blank line 35 36 // call myGradeBook's displayMessage function 37 // and pass nameOfCourse as an argument 38 myGradeBook.displayMessage( nameOfCourse ); 39 return 0; // indicate successful termination 40 } // end main
1 2 // Define class GradeBook that contains a courseName data member 3 // and member functions to set and get its value; 4 // Create and manipulate a GradeBook object with these functions. 5 #include <iostream> 6 using std::cout; 7 using std::cin; 8 using std::endl; 9 10 #include <string> // program uses C++ standard string class 11 using std::string; 12 using std::getline; 13 14 // GradeBook class definition 15 class GradeBook 16 { 17 public: 18 // function that sets the course name 19 void setCourseName( string name ) 20 { 21 courseName = name; // store the course name in the object 22 } // end function setCourseName 23 24 // function that gets the course name 25 string getCourseName() 26 { 27 return courseName; // return the object's courseName 28 } // end function getCourseName 29 30 // function that displays a welcome message 31 void displayMessage() 32 { 33 // this statement calls getCourseName to get the 34 // name of the course this GradeBook represents 35 cout << "Welcome to the grade book for\n" << getCourseName() << "!" 36 << endl; 37 } // end function displayMessage 38 private: 39 string courseName; // course name for this GradeBook 40 }; // end class GradeBook 41 42 // function main begins program execution 43 int main() 44 { 45 string nameOfCourse; // string of characters to store the course name 46 GradeBook myGradeBook; // create a GradeBook object named myGradeBook 47 48 // display initial value of courseName 49 cout << "Initial course name is: " << myGradeBook.getCourseName() 50 << endl; 51 52 // prompt for, input and set course name 53 cout << "\nPlease enter the course name:" << endl; 54 getline( cin, nameOfCourse ); // read a course name with blanks 55 myGradeBook.setCourseName( nameOfCourse ); // set the course name 56 57 cout << endl; // outputs a blank line 58 myGradeBook.displayMessage(); // display message with new course name 59 return 0; // indicate successful termination 60 } // end main
What if you want to provide a course name when you create a GradeBook object? Each class you declare can provide a constructor that can be used to initialize an object of the class when the object is created. A constructor is a special member function that must be defined with the same name as the class, so that the compiler can distinguish it from the class’s other member functions. An important difference between constructors and other functions is that constructors cannot return values, so they cannot specify a return type (not even void). Normally, constructors are declared public.
1 // Fig. 3.7: fig03_07.cpp 2 // Instantiating multiple objects of the GradeBook class and using 3 // the GradeBook constructor to specify the course name 4 // when each GradeBook object is created. 5 #include <iostream> 6 using std::cout; 7 using std::endl; 8 9 #include <string> // program uses C++ standard string class 10 using std::string; 11 12 // GradeBook class definition 13 class GradeBook 14 { 15 public: 16 // constructor initializes courseName with string supplied as argument 17 GradeBook( string name ) 18 { 19 setCourseName( name ); // call set function to initialize courseName 20 } // end GradeBook constructor 21 22 // function to set the course name 23 void setCourseName( string name ) 24 { 25 courseName = name; // store the course name in the object 26 } // end function setCourseName 27 28 // function to get the course name 29 string getCourseName() 30 { 31 return courseName; // return object's courseName 32 } // end function getCourseName 33 34 // display a welcome message to the GradeBook user 35 void displayMessage() 36 { 37 // call getCourseName to get the courseName 38 cout << "Welcome to the grade book for\n" << getCourseName() 39 << "!" << endl; 40 } // end function displayMessage 41 private: 42 string courseName; // course name for this GradeBook 43 }; // end class GradeBook 44 45 // function main begins program execution 46 int main() 47 { 48 // create two GradeBook objects 49 GradeBook gradeBook1( "CS101 Introduction to C++ Programming" ); 50 GradeBook gradeBook2( "CS102 Data Structures in C++" ); 51 52 // display initial value of courseName for each GradeBook 53 cout << "gradeBook1 created for course: " << gradeBook1.getCourseName() 54 << "\ngradeBook2 created for course: " << gradeBook2.getCourseName() 55 << endl; 56 return 0; // indicate successful termination 57 } // end main
Any constructor that takes no arguments is called a default constructor. A class gets a default constructor in one of two ways:
Each of the previous examples in the chapter consists of a single .cpp file, also known as a source-code file, that contains a GradeBook class definition and a main function. When building an object-oriented C++ program, it is customary to define reusable source code (such as a class) in a file that by convention has a .h filename extension known as a header file. Programs use #include preprocessor directives to include header files and take advantage of reusable software components, such as type string provided in the C++ Standard Library and user-defined types like class GradeBook.
1 // GradeBook.h 2 // GradeBook class definition in a separate file from main. 3 #include <iostream> 4 using std::cout; 5 using std::endl; 6 7 #include <string> // class GradeBook uses C++ standard string class 8 using std::string; 9 10 // GradeBook class definition 11 class GradeBook 12 { 13 public: 14 // constructor initializes courseName with string supplied as argument 15 GradeBook( string name ) 16 { 17 setCourseName( name ); // call set function to initialize courseName 18 } // end GradeBook constructor 19 20 // function to set the course name 21 void setCourseName( string name ) 22 { 23 courseName = name; // store the course name in the object 24 } // end function setCourseName 25 26 // function to get the course name 27 string getCourseName() 28 { 29 return courseName; // return object's courseName 30 } // end function getCourseName 31 32 // display a welcome message to the GradeBook user 33 void displayMessage() 34 { 35 // call getCourseName to get the courseName 36 cout << "Welcome to the grade book for\n" << getCourseName() 37 << "!" << endl; 38 } // end function displayMessage 39 private: 40 string courseName; // course name for this GradeBook 41 }; // end class GradeBook
1 // fig03_10.cpp 2 // Including class GradeBook from file GradeBook.h for use in main. 3 #include <iostream> 4 using std::cout; 5 using std::endl; 6 7 #include "GradeBook.h" // include definition of class GradeBook 8 9 // function main begins program execution 10 int main() 11 { 12 // create two GradeBook objects 13 GradeBook gradeBook1( "CS101 Introduction to C++ Programming" ); 14 GradeBook gradeBook2( "CS102 Data Structures in C++" ); 15 16 // display initial value of courseName for each GradeBook 17 cout << "gradeBook1 created for course: " << gradeBook1.getCourseName() 18 << "\ngradeBook2 created for course: " << gradeBook2.getCourseName() 19 << endl; 20 return 0; // indicate successful termination 21 } // end main
GradeBook class definition containing function prototypes that specify the interface of the class.
1 // GradeBook.h 2 // GradeBook class definition. This file presents GradeBook's public 3 // interface without revealing the implementations of GradeBook's member 4 // functions, which are defined in GradeBook.cpp. 5 #include <string> // class GradeBook uses C++ standard string class 6 using std::string; 7 8 // GradeBook class definition 9 class GradeBook 10 { 11 public: 12 GradeBook( string ); // constructor that initializes courseName 13 void setCourseName( string ); // function that sets the course name 14 string getCourseName(); // function that gets the course name 15 void displayMessage(); // function that displays a welcome message 16 private: 17 string courseName; // course name for this GradeBook 18 }; // end class GradeBook
1 // GradeBook.cpp 2 // GradeBook member-function definitions. This file contains 3 // implementations of the member functions prototyped in GradeBook.h. 4 #include <iostream> 5 using std::cout; 6 using std::endl; 7 8 #include "GradeBook.h" // include definition of class GradeBook 9 10 // constructor initializes courseName with string supplied as argument 11 GradeBook::GradeBook( string name ) 12 { 13 setCourseName( name ); // call set function to initialize courseName 14 } // end GradeBook constructor 15 16 // function to set the course name 17 void GradeBook::setCourseName( string name ) 18 { 19 courseName = name; // store the course name in the object 20 } // end function setCourseName 21 22 // function to get the course name 23 string GradeBook::getCourseName() 24 { 25 return courseName; // return object's courseName 26 } // end function getCourseName 27 28 // display a welcome message to the GradeBook user 29 void GradeBook::displayMessage() 30 { 31 // call getCourseName to get the courseName 32 cout << "Welcome to the grade book for\n" << getCourseName() 33 << "!" << endl; 34 } // end function displayMessage
1 // fig03_13.cpp 2 // GradeBook class demonstration after separating 3 // its interface from its implementation. 4 #include <iostream> 5 using std::cout; 6 using std::endl; 7 8 #include "GradeBook.h" // include definition of class GradeBook 9 10 // function main begins program execution 11 int main() 12 { 13 // create two GradeBook objects 14 GradeBook gradeBook1( "CS101 Introduction to C++ Programming" ); 15 GradeBook gradeBook2( "CS102 Data Structures in C++" ); 16 17 // display initial value of courseName for each GradeBook 18 cout << "gradeBook1 created for course: " << gradeBook1.getCourseName() 19 << "\ngradeBook2 created for course: " << gradeBook2.getCourseName() 20 << endl; 21 return 0; // indicate successful termination 22 } // end main