i don't remember exactly what the hell this really does or is, but i think it was a simple test program for mult inheritance and polymorphism.
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
class abstractBaseClass
{
public:
abstractBaseClass() {cout<<"abstractBaseClass constructor called"<<endl;}
virtual ~abstractBaseClass() {cout<<"abstractBaseClass destructor called"<<endl;}
virtual void printObjectData() = 0;
};
//////////////////////////////////////////////////////////////////////////////////////////
class secondaryParent : virtual public abstractBaseClass
{
protected:
int P;
public:
secondaryParent(int pInput = 0) {P = pInput; cout<<"secondaryParent constructor called"<<endl;}
virtual ~secondaryParent() {cout<<"secondaryParent destructor called"<<endl;}
int getP() {return P;}
};
class tertiaryParent : virtual public abstractBaseClass
{
protected:
int Q;
public:
tertiaryParent(int qInput = 0) {Q = qInput; cout<<"tertiaryParent constructor called"<<endl;}
virtual ~tertiaryParent() {cout<<"tertiaryParent destructor called"<<endl;}
int getQ() {return Q;}
};
//////////////////////////////////////////////////////////////////////////////////////////
class child1 : public secondaryParent, public tertiaryParent
{
public:
child1() {cout<<"child1 constructor called"<<endl; P = secondaryParent::P; Q = tertiaryParent::Q;}
virtual ~child1() {cout<<"child1 destructor called"<<endl;}
virtual void printObjectData() {cout<<"child1 "<<getP()<<" "<<getQ()<<endl;}
};
class child2 : public secondaryParent, public tertiaryParent
{
public:
child2() {cout<<"child2 constructor called"<<endl; P = secondaryParent::P; Q = tertiaryParent::Q;}
virtual ~child2() {cout<<"child2 destructor called"<<endl;}
virtual void printObjectData() {cout<<"child2 "<<getP()<<" "<<getQ()<<endl;}
};
class child3 : public secondaryParent, public tertiaryParent
{
public:
child3() {cout<<"child3 constructor called"<<endl; P = secondaryParent::P; Q = tertiaryParent::Q;}
virtual ~child3() {cout<<"child3 destructor called"<<endl;}
virtual void printObjectData() {cout<<"child3 "<<getP()<<" "<<getQ()<<endl;}
};
///////////////////////////////////////////////////////////////////////////////////////
int main()
{
srand(time(0));//seed rand
int randChoice, P, Q;
P = ((rand()%100 + 1));
Q = ((rand()%1000 + 1));
abstractBaseClass* x;//pointer to base class
randChoice = rand()%3 + 1;//pick which object to instantiate
switch (randChoice)
{
case 1:
x = new child1();
break;
case 2:
x = new child2();
break;
case 3:
x = new child3();
break;
}//end switch
x->printObjectData();
delete x;//delete base class pointer
return 0;
}//end main