Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and...

27
Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

Transcript of Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and...

Page 1: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Class Relationships And Reuse

Interlude 4

Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

Page 2: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Contents

• Inheritance Revisited• Containment: Has-a Relationships• Abstract Base Classes Revisited

Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

http://mediaplayer.pearsoncmg.com/_ph_cc_ecs960544_set.title.Cpp_Inheritance_and_Access__/aw/streaming/ecs_carrano_dapscpp_6/CI4_C_Inheritance_and_Polymorphism.m4v

Page 3: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Inheritance Revisited

• Inheritance: Relationships among timepieces Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

Page 4: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Inheritance Revisited

• Multiple inheritance

Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

Page 5: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Inheritance Revisited

• The class PlainBox

Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

Page 6: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Inheritance Revisited

• Derived class MagicBox inherits members of base class PlainBox, redefines and adds members

Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

New

Redefined

Page 7: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Inheritance Revisited

• The class MagicBoxData Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

Page 8: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Inheritance Revisited

• Instance of derived class has all behaviors of its base class

• Derived class inherits private members from base class– But cannot access them directly

• Derived class’s methods can call base class’s public methods

• Clients of a derived class can invoke base class’s public methods

Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

Page 9: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Inheritance Revisited

• Early, or static, binding: Compiler determines which version of a method to invoke

Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

Page 10: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Inheritance Revisited

• Late binding: appropriate version of method decided at execution time

• Polymorphic method has multiple meanings

• Virtual method: can be overridden

• Method virtual in base class, virtual in any derived class

Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

Page 11: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Public, Private, and Protected Sections of a Class

• Virtual method tables when cardBoxPtr points to (a) an instance of PlainBox

Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

Page 12: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Public, Private, and Protected Sections of a Class

• Access to public, private, and protected sections of a class by a client and a derived class

Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

Page 13: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Public, Private, and Protected Sections of a Class

• Virtual method tables when cardBoxPtr points to (b) an instance of MagicBox

Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

Page 14: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Access Categories of a Class

• Public members can be used by anyone.

• Private members can be used only by methods of the class.

• Guideline: In general, class’s data members should be private

Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

Page 15: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Kinds of Inheritance

• Public inheritance – Public and protected members of base class remain,

public and protected members of derived class

• Protected inheritance– Public and protected members of base class are

protected members of derived class.

• Private inheritance– Public and protected members of base class are

private members of the derived class.

Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

Page 16: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Is-a and As-a Relationships

• A magic box is a plain box

Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

Page 17: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Is-a and As-a Relationships

• Use public inheritance only when is-a relationship exists between two classes

• You can use instance of derived class – anywhere you can use instance of base class

• If relationship between 2 classes not is-a , – should not use public inheritance

• If class needs access to protected members of another class or if you need to redefine methods in that class, – You can form an as-a relationship

Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

Page 18: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Containment: Has-a Relationships

• A pen has a or contains a ball

Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

Page 19: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Execution Order of Constructors and Destructors

Constructors execute in following order:

1.Its base class constructor executes.

2.Constructors of its member objects execute in the declaration order.

3.The body of its constructor executes.

Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

Page 20: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Execution Order of Constructors and Destructors

Destructors execute in the opposite order:

1.The body of its destructor executes.

2.Destructors of its member objects execute in the declaration order.

3.Its base class destructor executes.

Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

Page 21: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Abstract Base Classes Revisited

• CDP and DVDP have an abstract base class Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

Page 22: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Abstract Base Classes Revisited

• CDP and DVDP are derived from GDP Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

Page 23: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Abstract Base Classes Revisited

• A class that contains at least one pure virtual method is an abstract base class

• An abstract base class has descendants but no instance

Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

Page 24: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Abstract Base Classes Revisited

• An abstract class that is an interface for the ADT box Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

Page 25: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Abstract Base Classes Revisited

• UML class diagram of the family of box classes Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

Page 26: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Abstract Base Classes Revisited

• By definition is a class that contains at least one pure virtual method.

• Used only as the basis for derived classes – Thus defines a minimum interface for its

descendants.

• Has no instances.

Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

Page 27: Class Relationships And Reuse Interlude 4 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Abstract Base Classes Revisited

• Should, in general, omit implementations – Except for the destructor methods that provide

access to private data members.

• That is, virtual methods in an abstract base class usually should be pure.

• Must implement any virtual method that is not pure, – Thereby providing a default implementation if

derived class chooses not to supply its own.

Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012