View Single Post
Old Jun 6th, 2006, 6:09 PM   #5
bl00dninja
Programming Guru
 
bl00dninja's Avatar
 
Join Date: Oct 2004
Location: namespace std
Posts: 1,246
Rep Power: 6 bl00dninja is on a distinguished road
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
__________________
i put on my robe and wizard hat...

Have you ever heard of Plato, Aristotle, Socrates?...Morons.
bl00dninja is offline   Reply With Quote