Chapter 9 Multiple Inheritance 1 Multiple Inheritance z

  • Slides: 9
Download presentation
Chapter 9 Multiple Inheritance 1

Chapter 9 Multiple Inheritance 1

Multiple Inheritance z. Inherit from more than one base class z. Sometimes useful ymultiple

Multiple Inheritance z. Inherit from more than one base class z. Sometimes useful ymultiple code reuse yflexible polymorphism z. Not supported in all O-O languages y. E. g. , Java xmultiple interface inheritance (flexible polymorphism) xsingle code inheritance (limited code reuse) 2

Simple “Mixin” Class class Named { private: char* name; public: Named(char* original. Name); int

Simple “Mixin” Class class Named { private: char* name; public: Named(char* original. Name); int Is. Named(char* possible. Name); char* Get. Name(); void Set. Name(char* new. Name); ~Named(); }; 3

Multiple Inheritance z. Inheriting multiple “orthogonal” classes class Named. Number : public Number, public

Multiple Inheritance z. Inheriting multiple “orthogonal” classes class Named. Number : public Number, public Named { public: Named. Number(int initial. Value, char* name); ~Named. Number(); }; // implementation Named. Number: : Named. Number(int intial. Value, char* name) : Number(initial. Value), Named(name) {} Both superclasses are constructed 4

Using Named. Number time(0, "Elapsed Time"); //. . . Inherited from Number time. Next();

Using Named. Number time(0, "Elapsed Time"); //. . . Inherited from Number time. Next(); if (time. Is. Named("Elapsed Time") ) //. . . Inherited from Named //. . . cout << time. Get. Name() << " is ” << time. Value() << endl; Inherited from Number 5

Pure Abstract “Mixin” Class z. Define an “interface” for common methods y. Interface: a

Pure Abstract “Mixin” Class z. Define an “interface” for common methods y. Interface: a class with no data or code class Sequenced // pure abstract class { public: virtual void Next() = 0; // compute the next // element in the sequence virtual void Show() = 0; // present the current // element in the sequence }; 6

Using Sequenced with Displayable. Number Hierarchy z. Displayable. Number could inherit from Sequenced y

Using Sequenced with Displayable. Number Hierarchy z. Displayable. Number could inherit from Sequenced y class Displayable. Number: public Sequenced z. Subclasses of Displayable. Number could inherit Sequenced y class Cycler: public Displayable. Number, public Sequenced z. New subclasses of Displayable. Number subclasses could mix in Sequenced y class Timed. Cycler: public Cycler, public Sequenced 7

Multiple Inheritance with Abstract Class class Timed. Number : public Number, public Sequenced {

Multiple Inheritance with Abstract Class class Timed. Number : public Number, public Sequenced { public: Timed. Number(int initial. Value); }; class Timed. Animation : public Animation, public Sequenced { public: Timed. Animation(. . . ); }; 8

Resolving Name Ambiguity in Multiple Inheritence z. What if same member is in superclasses?

Resolving Name Ambiguity in Multiple Inheritence z. What if same member is in superclasses? Aclass Bclass void Do. Something(); Cclass c. Obj; c. Obj. Do. Something(); c. Obj. Bclass: : Do. Something(); Ambiguous. Compiler error Disambiguate with scope resolution operator ‘: : ’ 9