Illustration of the use of virtual inheritance.  //   // Virtual inheritance   #include <iostream.h>   typedef int HANDS; ...
virtual ~Bird() {cout << "Bird destructor...n"; }   virtual void Chirp()const { cout << "Chirp... "; }   virtual void Fly(...
delete pPeg;     return 0; }/ virtual members#include <iostream>using namespace std;class CPolygon {  protected:     int w...
#include <iostream>using namespace std;class CPolygon {  protected:     int width, height;  public:     void set_values (i...
class CTriangle: public CPolygon {  public:     int area (void)       { return (width * height / 2); }  };int main () {  C...
Upcoming SlideShare
Loading in...5
×

Virtual inheritance

470

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
470
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
17
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Virtual inheritance

  1. 1. Illustration of the use of virtual inheritance. // // Virtual inheritance #include <iostream.h> typedef int HANDS; enum COLOR { Red, Green, Blue, Yellow, White, Black, Brown } ; enum BOOL { FALSE, TRUE }; class Animal // common base to both horse and bird { public: Animal(int); virtual ~Animal() { cout << "Animal destructor...n"; } virtual int GetAge() const { return itsAge; } virtual void SetAge(int age) { itsAge = age; } private: int itsAge; }; Animal::Animal(int age): itsAge(age) { cout << "Animal constructor...n"; } class Horse : virtual public Animal { public: Horse(COLOR color, HANDS height, int age); virtual ~Horse() { cout << "Horse destructor...n"; } virtual void Whinny()const { cout << "Whinny!... "; } virtual HANDS GetHeight() const { return itsHeight; } virtual COLOR GetColor() const { return itsColor; } protected: HANDS itsHeight; COLOR itsColor; }; Horse::Horse(COLOR color, HANDS height, int age): Animal(age), itsColor(color),itsHeight(height) { cout << "Horse constructor...n"; } class Bird : virtual public Animal { public: Bird(COLOR color, BOOL migrates, int age);
  2. 2. virtual ~Bird() {cout << "Bird destructor...n"; } virtual void Chirp()const { cout << "Chirp... "; } virtual void Fly()const { cout << "I can fly! I can fly! I can fly! "; } virtual COLOR GetColor()const { return itsColor; } virtual BOOL GetMigration() const { return itsMigration; }protected: COLOR itsColor; BOOL itsMigration;};Bird::Bird(COLOR color, BOOL migrates, int age): Animal(age), itsColor(color), itsMigration(migrates){ cout << "Bird constructor...n";}class Pegasus : public Horse, public Bird{public: void Chirp()const { Whinny(); } Pegasus(COLOR, HANDS, BOOL, long, int); ~Pegasus() {cout << "Pegasus destructor...n";} virtual long GetNumberBelievers() const { return itsNumberBelievers; } virtual COLOR GetColor()const { return Horse::itsColor; }private: long itsNumberBelievers;};Pegasus::Pegasus( COLOR aColor, HANDS height, BOOL migrates, long NumBelieve, int age):Horse(aColor, height,age),Bird(aColor, migrates,age),Animal(age*2),itsNumberBelievers(NumBelieve){ cout << "Pegasus constructor...n";}int main(){ Pegasus *pPeg = new Pegasus(Red, 5, TRUE, 10, 2); int age = pPeg->GetAge(); cout << "This pegasus is " << age << " years old.n";
  3. 3. delete pPeg; return 0; }/ virtual members#include <iostream>using namespace std;class CPolygon { protected: int width, height; public: void set_values (int a, int b) { width=a; height=b; } virtual int area () { return (0); } };class CRectangle: public CPolygon { public: int area () { return (width * height); } };class CTriangle: public CPolygon { public: int area () { return (width * height / 2); } };int main () { CRectangle rect; CTriangle trgl; CPolygon poly; CPolygon * ppoly1 = &rect; CPolygon * ppoly2 = &trgl; CPolygon * ppoly3 = &poly; ppoly1->set_values (4,5); ppoly2->set_values (4,5); ppoly3->set_values (4,5); cout << ppoly1->area() << endl; cout << ppoly2->area() << endl; cout << ppoly3->area() << endl; return 0;}
  4. 4. #include <iostream>using namespace std;class CPolygon { protected: int width, height; public: void set_values (int a, int b) { width=a; height=b; } virtual int area (void) =0; };class CRectangle: public CPolygon { public: int area (void) { return (width * height); } };class CTriangle: public CPolygon { public: int area (void) { return (width * height / 2); } };int main () { CRectangle rect; CTriangle trgl; CPolygon * ppoly1 = &rect; CPolygon * ppoly2 = &trgl; ppoly1->set_values (4,5); ppoly2->set_values (4,5); cout << ppoly1->area() << endl; cout << ppoly2->area() << endl; return 0;}// pure virtual members can be called// from the abstract base class#include <iostream>using namespace std;class CPolygon { protected: int width, height; public: void set_values (int a, int b) { width=a; height=b; } virtual int area (void) =0; void printarea (void) { cout << this->area() << endl; } };class CRectangle: public CPolygon { public: int area (void) { return (width * height); } };
  5. 5. class CTriangle: public CPolygon { public: int area (void) { return (width * height / 2); } };int main () { CRectangle rect; CTriangle trgl; CPolygon * ppoly1 = &rect; CPolygon * ppoly2 = &trgl; ppoly1->set_values (4,5); ppoly2->set_values (4,5); ppoly1->printarea(); ppoly2->printarea(); return 0;}

×