c++ programming: from problem analysis to program design, fourth edition

76
C++ Programming: From Problem Analysis to Program Design, Fourth Edition Chapter 13: Inheritance and Composition

Upload: cuyler

Post on 14-Jan-2016

27 views

Category:

Documents


1 download

DESCRIPTION

C++ Programming: From Problem Analysis to Program Design, Fourth Edition. Chapter 13: Inheritance and Composition. Objectives. In this chapter, you will: Learn about inheritance Learn about derived and base classes Explore how to redefine the member functions of a base class - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysisto Program Design, Fourth Edition

Chapter 13: Inheritance and Composition

Page 2: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 2

Objectives

In this chapter, you will:• Learn about inheritance• Learn about derived and base classes• Explore how to redefine the member

functions of a base class• Examine how the constructors of base and

derived classes work• Learn how to construct the header file of a

derived class

Page 3: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 3

Objectives (continued)

• Become familiar with the C++ stream hierarchy

• Explore three types of inheritance: public, protected, and private

• Learn about composition• Become familiar with the three basic

principles of object-oriented design

Page 4: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 4

Inheritance and Composition

• The two common ways to relate two classes in a meaningful way are:− Inheritance (“is-a” relationship)

− Composition (“has-a” relationship)

Page 5: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 5

Inheritance

• Inheritance is an “is-a” relationship− Example: “every employee is a person”

• Inheritance lets us create new classes from existing classes− New classes are called the derived classes

− Existing classes are called the base classes

• Derived classes inherit the properties of the base classes

Page 6: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

Examples

Base class

• Student

• Shape

• Employee

Derived classes

• Graduate Student• Undergraduate student

• Circle• Rectangle

• Faculty Member• Staff member

Page 7: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

Inheritance (continued)

• Single inheritance: derived class has a single base class− Ex. Circle class from Shape class

• Multiple inheritance: derived class has more than one base class…will not be discussed in this chapter.

− Ex. Son class from Mother class and Father class

• Public inheritance: all public members of base class are inherited as public members by derived class

Page 8: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 8

Inheritance (continued)

• Inheritance can be viewed as a tree-like, or hierarchical, structure wherein a base class is shown with its derived classes

Page 9: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 9

Inheritance (continued)

• General syntax of a derived class:

− Where memberAccessSpecifier is public, protected, or private (default)

• The private members of a base class are private to the base class− Derived class cannot directly access them

− Ex. Class SonClass: public FatherClass

{ };

Page 10: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

objAx

y

z

printA

setA

objBvar1

printB

setB

var2

x

y

z

printA

setA

A

Base

derived

Page 11: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

objBvar1

printB

setB

printA

setA

var2

z

x

y

objAx

y

z

printA

setA

Can not access x, y

Page 12: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

objBvar1

printB

setB

var2

z

x

y

objAx

y

z

printA

setA

printA

setA

Page 13: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

objBvar1

printB

setB

printA

setA

var2

z

x

y

Page 14: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 14

Inheritance (continued)

• public members of base class can be inherited as public or private members

• The derived class can include additional members--data and/or functions

• The derived class can redefine the public member functions of the base class

• All members of the base class are also member variables of the derived class

Page 15: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

Redefining (Overriding) Member Functions of the Base Class

• To redefine (override) a public member function of a base class

− Corresponding function in the derived class must have the same name, number, and types of parameters. Redefined

− If the function has a different signature, this would be function overloading.

Page 16: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

Redefining (Overriding) Member Functions of the Base Class (continued)

• If derived class overrides a public member function of the base class, then to call the base class function, specify:

− Name of the base class

− Scope resolution operator (::)

− Function name with the appropriate parameter list

Page 17: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

var1

print

setB

A::print

setA

var2

z

x

y

Page 18: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 18

Redefining Member Functions of the Base Class (continued)

Page 19: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 19

Redefining Member Functions of the Base Class (continued)

Page 20: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 20

Redefining Member Functions of the Base Class (continued)

Page 21: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition
Page 22: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition
Page 23: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition
Page 24: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 24

Redefining Member Functions of the Base Class (continued)

• boxType is derived from rectangleType, and it is a public inheritance− Also overrides print and area

Page 25: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition
Page 26: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 26

Constructors of Derived and Base Classes

• Derived class constructor cannot directly access private members of the base class

• Derived class can directly initialize only public member variables of the base class

• When a derived object is declared− It must execute one of the base class

constructors

• Call to base class constructor is specified in heading of derived class constructor definition

Page 27: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

Example

Page 28: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

Example

Page 29: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Third Edition

29

Example

Page 30: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 30

Constructors of Derived and Base Classes (continued)

Page 31: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 31

Constructors of Derived and Base Classes (continued)

Page 32: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition
Page 33: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 33

Constructors of Derived and Base Classes (continued)

Page 34: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition
Page 35: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

3

objB

A

4

x

y

Page 36: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 36

Header File of a Derived Class

• To define new classes− Create new header files

• To create new classes based on previously defined classes− Header files of the new classes contain

commands that specify where to look for the definitions of the base classes

• The definitions of the member functions can be placed in a separate file

Page 37: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition
Page 38: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 38

Multiple Inclusions of a Header File

• Use the preprocessor command (#include) to include a header file in a program

• The preprocessor processes the program before it is compiled

• To avoid multiple inclusion of a file in a program

− Use certain preprocessor commands in the header file (“file guard”)

Page 39: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

Problem: Solution:

Note that test.h included twiceONE and TWO Declared twice

Page 40: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

File1.h

File.cpp

error Without errors

Page 41: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

Examples

error

Page 42: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 42

C++ Stream Classes

• ios is the base class for all stream classes− Contains formatting flags and member

functions to access/modify the flag settings

Page 43: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 43

C++ Stream Classes (continued)

• istream and ostream provide operations for data transfer between memory and devices− istream defines the extraction operator (>>)

and functions such as get and ignore− ostream defines the insertion operator (<<),

which is used by cout• ifstream/ofstream objects are for file I/O

− Header file fstream contains the definitions

Page 44: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 44

Protected Members of a Class

• Private members of a class cannot be directly accessed outside the class

• For a base class to give derived class access to a private member− Declare that member as protected

• The accessibility of a protected member of a class is in between public and private− A derived class can directly access the protected member of the base class

Page 45: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 45

Inheritance as public, protected, or private

• If memberAccessSpecifier is public:− public members of A are public members

of B and can be directly accessed in class B− protected members of A are protected

members of B and can be directly accessed by member functions (and friend functions) of B

− private members of A are hidden in B and can be accessed by member functions of B through public or protected members of A

Page 46: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 46

Inheritance as public, protected, or private (continued)

• If memberAccessSpecifier is protected:− public members of A are protected

members of B and can be accessed by the member functions (and friend functions) of B

− protected members of A are protected members of B and can be accessed by the member functions (and friend functions) of B

− private members of A are hidden in B and can be accessed by member functions of B through public or protected members of A

Page 47: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 47

Inheritance as public, protected, or private (continued)

• If memberAccessSpecifier is private:− public members of A are private members

of B and can be accessed by member functions of B

− protected members of A are private members of B and can be accessed by member functions (and friend functions) of B

− private members of A are hidden in B and can be accessed by member functions of B through public/protected members of A

Page 48: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition
Page 49: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 49

Composition

• In composition, one or more member(s) of a class are objects of another class type

• Composition is a “has-a” relation• Arguments to the constructor of a member-

object are specified in the heading part of the definition of the constructor

Page 50: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 50

Composition (continued)

• Member-objects of a class are constructed:− In the order they are declared

• Not in the order they are listed in the constructor’s member initialization list

− Before the enclosing class objects are constructed

Page 51: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

ExampleobjB

objA

z

x

y

5

3

4

Page 52: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

Composition (continued)• Member-objects of a class are

constructed

− In the order they are declared

• Not in the order they are listed in the constructor’s member initialization list

− Before the enclosing class objects are constructed

Page 53: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

Example

objC

objB

objA

objA

Page 54: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

Example

Page 55: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition
Page 56: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition
Page 57: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition
Page 58: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition
Page 59: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition
Page 60: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition
Page 61: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 61

Object-Oriented Design and Object-Oriented Programming

• The fundamental principles of object-oriented design (OOD) are:− Encapsulation: combine data and operations

on data in a single unit

− Inheritance: create new objects from existing objects

− Polymorphism: the ability to use the same expression to denote different operations

Page 62: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 62

OOD and OOP (continued)

• OOD − Object is a fundamental entity

− Debug objects

− Program is a collection of interacting objects

− Programmer is object-oriented

− OOD encourages code reuse

Page 63: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 63

OOD and OOP (continued)

• Structured programming− Function is a fundamental entity

− Debug functions

− Program is a collection of interacting functions

− Programmer is action-oriented

Page 64: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 64

OOD and OOP (continued)

• Object-oriented programming (OOP) implements OOD

• C++ supports OOP through the use of classes

• Polymorphic function or operator has many forms

• Function name and operators can be overloaded

Page 65: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 65

OOD and OOP (continued)

• Templates provide parametric polymorphism• C++ provides virtual functions as a means to

implement polymorphism in an inheritance hierarchy

• Objects are created when class variables are declared

• Objects interact via function calls

Page 66: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 66

OOD and OOP (continued)

• Every object has an internal state and external state

• Private members form the internal state• Public members form the external state• Only the object can manipulate its internal

state

Page 67: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 67

Identifying Classes, Objects, and Operations

• Finding classes: begin with a problem description and identify all nouns and verbs − From the list of nouns choose the classes

− From the list of verbs choose the operations

• Suppose we want to write a program that calculates and prints the volume and surface area of a cylinder

Page 68: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 68

Identifying Classes, Objects, and Operations (continued)

• We can state this problem as follows: − Write a program to input the dimensions of a

cylinder and calculate and print the surface area and volume

− The nouns are bold and the verbs are italic

− From the list of nouns we visualize a cylinder as a class (cylinderType) from which we can create many cylinder objects of various dimensions

Page 69: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 69

Identifying Classes, Objects, and Operations (continued)

• The nouns are characteristics of a cylinder:− Dimensions

− Surface area

− Volume

• After identifying a class, determine three pieces of information about its objects:− Operations that an object can perform

− Operations that can be performed on an object

− Information that an object must maintain

Page 70: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 70

Identifying Classes, Objects, and Operations (continued)

• From the verbs, choose a list of possible operations that an object of that class can perform, or has performed, on itself− For the cylinderType class:

• Input

• Calculate

• Print

− Dimensions represent the data

Page 71: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 71

Identifying Classes, Objects, and Operations (continued)

• The center of the base, radius of the base, and height of the cylinder are the characteristics of the dimensions

• Calculate: determine volume and surface area− cylinderVolume− cylinderSurfaceArea

• Print: display the volume and the surface area on an output device

Page 72: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 72

Identifying Classes, Objects, and Operations (continued)

• Identifying classes via the nouns and verbs from the descriptions to the problem is not the only technique possible

• There are several other OOD techniques in the literature

Page 73: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 73

Summary

• Inheritance and composition are meaningful ways to relate two or more classes

• Inheritance is an “is-a” relation− Single inheritance: a derived class is derived

from one class, called the base class

− Multiple inheritance: a derived class is derived from more than one base class

• Composition is a “has-a” relation

Page 74: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 74

Summary (continued)

• Private members of a base class are private to the base class

• Public members of a base class can be inherited either as public or private

• Derived class can redefine function members of a base class− Redefinition applies only to objects of derived

class

Page 75: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 75

Summary (continued)

• A call to a base class constructor (with parameters) is specified in the heading of the definition of the derived class constructor

• When initializing object of a derived class, the base class constructor is executed first

• In composition− Class member is an object of another class− Call to constructor of member objects is

specified in heading of the definition of class’s constructor

Page 76: C++ Programming:  From Problem Analysis to Program Design,  Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 76

Summary (continued)

• Three basic principles of OOD are:− Encapsulation

− Inheritance

− Polymorphism

• Finding classes:− Describe the problem

− Choose classes from the list of nouns

− Choose operations from the list of verbs