A First Book of C++ Chapter 10 Introduction to Classes Objectives • In this chapter, you will learn about: – – – – – – – Object-Based Programming Creating Your Own Classes Constructors Using Classes with Examples Class Scope and Duration Categories Common Programming Errors Modeling Objects A First Book of C++ 4th Edition 2 Object-Based Programming • Object: well suited to programming representation – Can be specified by two basic characteristics: • State: how object appears at the moment • Behavior: how object reacts to external inputs • Example of an object: an elevator – State: size, location, interior decoration – Behavior: reaction when one of its buttons is pushed A First Book of C++ 4th Edition 3 A Class Is a Plan • Class can be considered a construction plan for objects and how they can be used – Plan lists the required data items and supplies instructions for using the data • Many objects can be created from the same class – Each different object type requires its own class A First Book of C++ 4th Edition 4 From Recipe to Class • Class can be considered the plan or recipe from which programming objects are created • Class typically contains sections for ingredients and methods • Class declaration section provides: – List of data “ingredients” – List of method names and data types A First Book of C++ 4th Edition 5 Creating Your Own Classes • Class: programmer-defined data type – Also called an abstract data type – Combination of data and their associated operations (capabilities) • A C++ class provides mechanism for packaging data structure and functions together in selfcontained unit A First Book of C++ 4th Edition 6 Class Construction • Two components: – Declaration section: declares data types and function for class – Implementation section: defines functions whose prototypes were declared in declaration section • Class members: – Data members (instance variables) – Member functions A First Book of C++ 4th Edition 7 Class Construction (cont'd.) A First Book of C++ 4th Edition 8 Class Construction (cont'd.) • Example of class declaration section: class Date { private: int month; int day; int year; public: Date(int = 7, int = 4, int = 2012); void setDate(int, int, int); void showDate(void); }; // this is a declaration - don't forget the semicolon A First Book of C++ 4th Edition 9 Class Construction (cont'd.) • Declaration section of class definition – Enclosed in braces – Includes variables (data members) and function declarations – Keywords private and public: define access rights • private: class members (month, day, and year) can only be accessed using class functions – Enforces data security (data hiding) • public: class members (functions Date(), setDate(), showDate()) can be used outside of the class A First Book of C++ 4th Edition 10 Class Construction (cont'd.) • Constructor method: initializes class data members with values – Constructor function (Date()) has same name as the class – Default values for constructor are 7, 4, 2012 – Constructor function has no return type (a requirement for this special function) • Two remaining member functions: setDate() and showDate() declared as returning no value (void) A First Book of C++ 4th Edition 11 Class Construction (cont'd.) A First Book of C++ 4th Edition 12 Class Construction (cont'd.) A First Book of C++ 4th Edition 13 Class Construction (cont'd.) • Implementation section of class definition – As shown in Program 10.1 • Except for constructor function, which has no return data type – Functions: defined the same as other C++ functions but also include scope resolution operator • To identify function as member of class – Implementation and declaration sections declare a class • Variables of the class (objects) must still be defined A First Book of C++ 4th Edition 14 Class Construction (cont'd.) Example: Creation of objects of Date class in main() function of Program 10.1 int main() { Date a, b, c(4,1,2000); // declare 3 objects b.setDate(12,25,2009); // assign values to b's // data members a.showDate(); // display object a's values b.showDate(); // display object b's values c.showDate(); // display object c's values cout << endl; return 0; } A First Book of C++ 4th Edition 15 Class Construction (cont'd.) • Description of main(): – Three objects of class Date defined – Constructor function: Date(), automatically called • Memory allocated for each object • Data members of the objects initialized – Object a: no parameters assigned; therefore, defaults are used: a.month = 7 a.day = 4 a.year = 2012 A First Book of C++ 4th Edition 16 Class Construction (cont'd.) • Description of main(): (cont'd.) – Notation to create objects: objectName.attributeName – Object b: no parameters assigned, same defaults used – Object c: defined with arguments 4, 1, and 1998 • Three arguments passed into constructor function resulting in initialization of c’s data members as: c.month = 4 c.day = 1 c.year = 2000 A First Book of C++ 4th Edition 17 Class Construction (cont'd.) • Description of main(): (cont'd.) – All functions of class Date are public; therefore: • b.setDate(12, 25, 2007) is a valid statement inside main() function • Calls setDate() function with arguments 12 ,25, 2009 – Important distinction: data members of class Date are private • The statement b.month = 12 is invalid in main() A First Book of C++ 4th Edition 18 Class Construction (cont'd.) • Description of main(): (cont'd.) – Last three statements in main() call showDate() to operate on a, b, and c objects • Calls result in output displayed by Program 10.1 The date is 07/04/12 The date is 12/25/09 The date is 04/01/00 – The statement cout << a; is invalid within main() • cout does not know how to handle an object of class Date A First Book of C++ 4th Edition 19 Terminology • Class: programmer-defined data type • Objects (instances): created from classes – Relation of objects to classes is similar to relation of variables to C++ built-in data types • int a; // a is a variable of type integer • Date a; // a is an object of class Date – Instantiation: process of creating a new object • Creates new set of data members belonging to new object: determines the object’s state A First Book of C++ 4th Edition 20 Terminology (cont'd.) • Interface: part of class declaration section – Includes: • Class’s public member function declarations • Supporting comments • Implementation consists of: – Implementation section of class definition • Private member functions • Public member functions – Private data members from class declaration section A First Book of C++ 4th Edition 21 Terminology (cont'd.) • Internal construction of class is not relevant to programmer who just wishes to use class • Implementation can and should be hidden from all users A First Book of C++ 4th Edition 22 Constructors • A function that has the same name as its class – Multiple constructors can be defined for a class • Each must be distinguishable by the number and types of its parameters – If no constructor function is written, compiler assigns default constructor • Purpose: initialize a new object’s data members – May perform other tasks A First Book of C++ 4th Edition 23 Constructors (cont'd.) • Format: same name as class to which it belongs – Must have no return type (not even void) • Default constructor: does not require arguments when called – Two cases: • No parameters declared – As with compiler-supplied default constructor • Arguments have already been given default values in valid prototype statement: – Date (int = 7, int = 4, int = 2012) – Declaration Date a; initializes the a object with default values: 7, 4, 2012 A First Book of C++ 4th Edition 24 Constructors (cont'd.) • Sample class declaration: class Date { private: int month, day, year; public: void setDate(int, int, int); void showDate() }; A First Book of C++ 4th Edition 25 Constructors (cont'd.) • No constructor has been included – Compiler assigns a do-nothing default constructor equivalent to: Date (void) { } • This constructor expects no parameters and has an empty body A First Book of C++ 4th Edition 26 Constructors (cont'd.) A First Book of C++ 4th Edition 27 Constructors (cont'd.) • Use of constructor in main() : Program 10.2 int main() { Date a; // declare an object Date b; // declare an object Date c (4,1,2009); // declare an object return 0; } A First Book of C++ 4th Edition 28 Constructors (cont'd.) • Output from Program 10.2 Created a new data object with data values 7, 4, 2012 Created a new data object with data values 7, 4, 2012 Created a new data object with data values 4, 1, 2009 A First Book of C++ 4th Edition 29 Calling Constructors • Constructors are called whenever an object is created – Date c(4,1,2009); – Date c = Date(4,1,2009); • C style of initialization – Date c = 8; • Object should never be declared with empty parentheses A First Book of C++ 4th Edition 30 Overloaded and Inline Constructors • Constructors are called automatically each time an object is created – Other methods must be called explicitly by name • Constructors can: – Have default arguments (as in Program 10.1) – Be overloaded – Be written as inline functions A First Book of C++ 4th Edition 31 Destructors • Counterpart of constructor function – Has same name as constructor • Preceded with a tilde (~) – Date class constructor: ~Date() • Default destructor – Do-nothing destructor provided by C++ compiler in absence of explicit destructor • Can only be one destructor per class – Destructors take no values and return no arguments A First Book of C++ 4th Edition 32 Arrays of Objects • Declaring array of objects is the same as declaring array of C++ built-in type – Example: Date theDate[5]; • Creates five objects named theDate[0] through theDate[4] • Member functions for theDate array objects are called using: objectName.functionName A First Book of C++ 4th Edition 33 Examples • In the first example, you develop a class for determining the floor area of a rectangular room • In the second example, you construct a single elevator object A First Book of C++ 4th Edition 34 Example 1: Constructing a Room Object • Create class from which room type objects can be constructed • Solution: – One type of object: rectangular-shaped room • Represented by two double precision variables: length and width – Functions needed: • Constructor: to specify an actual length and width value when a room is instantiated A First Book of C++ 4th Edition 35 Example 1: Constructing a Room Object (cont'd.) – Functions needed: (cont'd.) • Accessor: to display room’s length and width • Mutator: to change above values • Function to calculate room’s floor area from its length and width values A First Book of C++ 4th Edition 36 Example 2: Constructing an Elevator Object • Simulate an elevator’s operation • Solution: – One type of object: elevator • Three attributes: elevator’s number, current location, and highest floor it can reach – Functions needed: • Constructor: initializes the elevator’s number, starting floor position, and highest floor • request(): to alter the elevator’s position A First Book of C++ 4th Edition 37 Class Scope and Duration Categories • Scope of an identifier: defines the portion of a program where the identifier is valid • Class data members are local to the class in which they’re declared • Class method names are local to the class they’re declared in and can be used only by objects declared for the class A First Book of C++ 4th Edition 38 Class Scope and Duration Categories (cont’d.) A First Book of C++ 4th Edition 39 Static Class Members • As each class object is created, it gets its own block of memory for its data members • In some cases, it’s convenient for every created object to share the same memory location for a specific variable – C++ handles this situation by declaring a class variable to be static • Static class variables share the same storage space for all class objects – They act as global variables for the class and provide a means of communication between objects A First Book of C++ 4th Edition 40 Friend Functions • Friend functions – Nonmember methods that are granted the same privileges as its member methods • Friends list – List of friend functions – Series of method prototype declarations preceded with the keyword friend and included in the class declaration section A First Book of C++ 4th Edition 41 Common Programming Errors • Failing to terminate class declaration with semicolon • Including return type with constructor’s prototype • Failing to include return type with other function’s prototype • Using same name for data member as for member method • Defining more than one default constructor for class A First Book of C++ 4th Edition 42 Common Programming Errors (cont'd.) • Forgetting to include class name and scope operator, ::, in the header line of all member methods defined in class implementation section • Using the static keyword when defining a static data member or member method • Using the friend keyword when defining a friend function • Failing to instantiate static data members before creating class objects that must access these data members A First Book of C++ 4th Edition 43 Summary • Class: programmer-defined data type – Class definition: includes declaration and implementation sections – Class members: variables and functions • Objects: same relation to class as variables have to C++ built-in data types • private keyword: private class members can only be accessed by member functions A First Book of C++ 4th Edition 44 Summary (cont'd.) • Class functions: may be written inline or defined in class implementation section • Constructor function: automatically called each time an object is declared – If none defined, compiler will supply default constructor • Default constructor: constructor that does not require arguments – One default constructor per class A First Book of C++ 4th Edition 45 Summary (cont'd.) • Objects created using either C or C++ style of declaration: – C++: Date a, b, c(12, 25, 2002) – C: Date c = Date(12,25,2006) • Constructors may be overloaded • If constructor is defined, user-defined default constructor should be written – Compiler will not provide it • Destructor: called when object goes out of scope – Takes no arguments, returns no value A First Book of C++ 4th Edition 46 Chapter Supplement: Thinking in Terms of Objects • Start by creating a diagram or map or devising a theoretical analogy for the problem you’re trying to solve A First Book of C++ 4th Edition 47 Representing Problems with Models • Model: a representation of a problem • Attributes: define the properties of interest • Behaviors: define how the object reacts to its environment • Follow these two steps: – Identify the required objects – For each object: • Identify the attributes of interest • Identify the behaviors (operations) of interest A First Book of C++ 4th Edition 48 Modeling Classes A First Book of C++ 4th Edition 49