Presentation is loading. Please wait.

Presentation is loading. Please wait.

Copyright 2006 Oxford Consulting, Ltd1 February2006 - 1 - Polymorphism Polymorphism Polymorphism is a major strength of an object centered paradigm Same.

Similar presentations


Presentation on theme: "Copyright 2006 Oxford Consulting, Ltd1 February2006 - 1 - Polymorphism Polymorphism Polymorphism is a major strength of an object centered paradigm Same."— Presentation transcript:

1 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 1 - Polymorphism Polymorphism Polymorphism is a major strength of an object centered paradigm Same general type of action…..  Accomplished in different ways  By different types of objects The underlying software system Decides how to achieve the action

2 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 2 - Polymorphism Polymorphism Key issue….. When to implement the action Compile time Early Binding Allows greater execution speed Achieved through optimized code Run time Late Binding Allows for greater flexibility Opportunity for abstraction

3 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 3 - Polymorphism Polymorphism and C++ Early Binding occurs at compile time Early binding polymorphism Process of overloading members Late Binding occurs at runtime Late binding polymorphism The code to implement the method is chosen at runtime Appropriate code chosen sending a message to the object …. Not to the pointer to the object Implemented through virtual functions

4 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 4 - Polymorphism Virtual Functions A virtual function must be declared in a parent class syntax virtual function virtual returnType functionName ( args i ) { function body ;} pure virtual function virtual returnType functionName ( args i ) = 0;

5 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 5 - Polymorphism Virtual Functions Declaration A function name is preceded by the keyword virtual qFunction name can only be used once in the parent class qCannot overload virtual functions qOnly class member functions can be declared virtual A function is virtual…..  If it is declared virtual  There is a base class function with the same signature declared virtual Any or all class member functions (except constructors) can be declared virtual

6 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 6 - Polymorphism Virtual Functions Implementation  The body of the virtual function must be supplied in the parent class unless declared to be a pure virtual function  A derived class can override the definition by providing its own implementation If the re-declaration does not match exactly…... The function not considered virtual for that class  A virtual function still permitted in a subsequently derived class

7 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 7 - Polymorphism Virtual Functions Such a capability permits multiple functions to be called through a common interface. Can be overridden by explicit qualification with the scope operator. Gives Uniform Function Call Interface Base Derived1 Derived2 Derived3 …….. Derivedn Public Interface

8 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 8 - Polymorphism Virtual Functions When function in a class is declared virtual Keyword virtual tells compiler  Don’t perform early binding  Install mechanisms to perform late binding Compiler responds by creating  Table of function pointers  Installing a data member to the class to point to the table

9 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 9 - Polymorphism Virtual Functions The compiler created table is called the vtable (vtbl) Contains pointers to all functions declared virtual within the class and derived classes. Each class gets its own vtable A data member called the vpointer (vPtr) Usually placed as the first element in object in memory. Initialized to the starting address of the vtable. The function call through a base class pointer Indexes into the vtable calls the function located at the address.

10 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 10 - Polymorphism class A { public: int i; virtual void f ( ); virtual void g( ); }; vptr i &f ( ) &g ( ) vtable[0] vtable[1] class A vtable

11 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 11 - Polymorphism class A { public: int i; virtual void f ( ); }; class B : public A { public: virtual void f ( );// override f( ) virtual void g ( ); // define g () }; class A vtable &f ( ) vtable[0] &f ( ) &g ( ) vtable[0] vtable[1] class B vtable

12 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 12 - Polymorphism Virtual Functions - vtable  Contains pointers to all virtual functions.  Each class gets its own vtable.  Abstract classes have no vtable.  Vtable size is proportional to the number of virtual functions.

13 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 13 - Polymorphism Virtual Functions - Invocation A virtual function is invoked through a public base class pointer or reference. Runtime Binding  Typically polymorphic binding is done dynamically at runtime  Virtual functions are not inlined Compile Time Binding  Occasionally have compile time polymorphic binding  Invoked through an object of the class type  Invoked using the scope operator  Invoked through a constructor or destructor

14 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 14 - Polymorphism Virtual Functions - Access Protection The access level of a virtual function is determined by  Access level in class of the pointer through which it’s invoked  Not by the class in which it’s defined.

15 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 15 - Polymorphism A B : public A C : public B D : public C E : public D Declare a and public virtual function f() public virtual function f() in B protected virtual function f() in C private virtual function f() in D Write: 1. A* a = new B; a-> f(); // f() accessible through *a (as a *B - *a in public area) 2. a = new C; a-> f(); // f() accessible through *a (as a *C - a* in public area) 3. C* c = new D; c-> f(); // f() not accessible through *c (as a *D - c* in protected area)

16 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 16 - Polymorphism Virtual Destructors When a base class pointer is used to refer to a derived class object and the object is deleted….. Only the base class destructor will be invoked leaving behind the derived class parts of the object.

17 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 17 - Polymorphism Virtual Destructors syntax virtual ~ class ClassName ( ) { destructor body } Specifying a destructor as virtual ensures all appropriate destructors are invoked. Rule of thumb…..If a class is abstract then declare the destructor as virtual. Don’t declare the destructor if there are no other virtual functions.

18 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 18 - Polymorphism Virtual Destructors Invocation order…. q The derived type destructor q The destructor for each base class….. …...Invoked in turn in normal fashion

19 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 19 - Polymorphism Polymorphism and Object Slicing One must exercise caution when treating objects polymorphically There is a distinct difference between passing objects by value and by reference. When a derived class object is passed by value to a function expecting a base class value…. The derived class portion is sliced off.

20 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 20 - Polymorphism Pure Virtual Functions ….A virtual function must be defined when it is declared  Abstract base class may be defined that is not intended to be instantiated  If virtual function is declared pure …. an implementation may still be supplied  Derived class may use implementation

21 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 21 - Polymorphism Pure Virtual Functions When a function is declared pure….. r There is no address to put into the vtable r The 0 keys the compiler that no instances of this class can be created

22 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 22 - Polymorphism Pure Virtual Functions Restrictions A class with one or more pure virtual functions. 1.Can only be used as a base class 2.Cannot have instances 3.Cannot be used as  An argument type  Return type  Type for explicit conversion 4.Can be used as a  Pointer  Reference type A class cannot define a pure virtual destructor

23 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 23 - Polymorphism Pure Virtual Definitions There may be occasions when it’s desirable to share code with derived classes but not duplicate in each class. Can prevent base class instantiation yet provide a definition for a pure virtual function. syntax virtual returnType functionName ( argsi ) = 0 { function body } access BaseClassName :: functionName ( );

24 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 24 - Polymorphism Virtual Functions Rules for Virtual Functions 1. Virtual functions called from within a constructor use the local version. 2.The first class in a derivation hierarchy that declares a virtual function it must provide a definition or it must declare the virtual function to be pure 3.If a definition is provided, the definition serves as the default instance in subsequent derivations 4.If pure, a subsequently derived class must provide a definition - to have instances or inherit the pure virtual function - have no instances

25 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 25 - Polymorphism Virtual Functions vf1 1 ( ) vf1 2 ( ) must define vf1 1 ( ) and vf1 2 ( ) vf1 2 ( ) can have instances pvf1 3 ( ) no instances no instances pvf1 3 ( ) = defines pvf1 3 ( ) can have instances Class 1 Class 2 Class 3 Class 4 Class 5

26 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 26 - Polymorphism Virtual Functions - Access Level The access level of a virtual function is….. qSpecified in the class where it is defined qNot by initial definition

27 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 27 - Polymorphism Virtual Base Classes Parent classes may have a common base class Fruit Peach Fruit PlumPeach Nectarine Stem Plum

28 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 28 - Polymorphism Virtual Base Classes Problem:  Fruit has a stem data member  Peach and plum each inherit a stem member from Fruit  Nectarine inherits a stem member from each  Could resolve using the scope operator Plum::stem Peach::stem

29 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 29 - Polymorphism Virtual Base Classes Solution: Declare Fruit as a virtual base class Result: Only a single copy of the base class in the derivation hierarchy. Only a single copy of all inherited data members. Subsequent derivations point to shared members.

30 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 30 - Polymorphism Virtual Base Classes - Specification Syntax class DerivedClass : virtual accessSpec BaseClass DerivedClass - The class being derived BaseClass- The parent class Specification- Specify base class member access public protected private The keyword virtual identifies BaseClass as a virtual base class of DerivedClass.

31 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 31 - Polymorphism Virtual Base Classes - Implementation B Data Members A Data Members B Data Members Virtual Derivation Non-Virtual Derivation

32 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 32 - Polymorphism Virtual Base Classes - Access Protection When there are multiple paths from a common root … ….the most public path dominates. Fruit PlumPeach Nectarine virtual public virtual private

33 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 33 - Polymorphism Virtual Base Classes - Initialization A virtual base class is initialized by the most derived class. Initialization Order: 1.Constructors for any virtual base class(es). 2.Constructors for any non-virtual base class. 3.The most derived class must provide initialization values.

34 Copyright 2006 Oxford Consulting, Ltd1 February2006 - 34 - Polymorphism Virtual Base Classes - Initialization Specify class E… class E : public D, public C, public virtual F A virtual BC D E F virtual base class


Download ppt "Copyright 2006 Oxford Consulting, Ltd1 February2006 - 1 - Polymorphism Polymorphism Polymorphism is a major strength of an object centered paradigm Same."

Similar presentations


Ads by Google