الباب العاشر

advertisement
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
Download