Chapter 9 Multiple Inheritance 1 Multiple Inheritance z









- Slides: 9
Chapter 9 Multiple Inheritance 1
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 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 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(); 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 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 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 { 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? 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