This test application works for me... you'll need to enable RTTI in your project settings for it to work:
Code:
#include <iostream>
using namespace std;
class Head
{
public:
virtual ~Head() {}
protected:
int size;
int length;
char name[21];
};
class Arms : public Head
{
public:
friend ostream& operator<< (ostream& os, const Arms& AnArm);
Arms()
{
number = 10;
somevar = 30;
size = 50;
length = 70;
}
private:
int number;
int somevar;
};
ostream& operator<< (ostream& os, const Arms& AnArm)
{
os << "Arm: number(" << AnArm.number
<< "), somevar(" << AnArm.somevar
<< "), size(" << AnArm.size
<< "), length(" << AnArm.length
<< ")" << endl;
return os;
}
class Legs : public Head
{
public:
friend ostream& operator<< (ostream& os, const Legs& ALeg);
Legs()
{
anothervar = 20;
yetsomevar = 40;
size = 60;
length = 80;
}
private:
int anothervar;
int yetsomevar;
};
ostream& operator<< (ostream& os, const Legs& ALeg)
{
os << "Leg: anothervar(" << ALeg.anothervar
<< "), yetsomevar(" << ALeg.yetsomevar
<< "), size(" << ALeg.size
<< "), length(" << ALeg.length
<< ")" << endl;
return os;
}
int main()
{
Head* MyHeads[10];
Arms MyArms[5];
Legs MyLegs[5];
// Alternately assign Arms ptr then Legs ptr to MyHeads array
for( int x = 0, i = 0; x < 10; ++x )
{
if( !(x % 2) ) MyHeads[x] = &MyArms[i]; // Even MyHeads gets an arm
else MyHeads[x] = &MyLegs[i++]; // Odd MyHeads gets a leg
}
// Now print them out
for( int y = 0; y < 10; ++y )
{
Arms* Arm = dynamic_cast<Arms*>(MyHeads[y]);
Legs* Leg = dynamic_cast<Legs*>(MyHeads[y]);
if( Arm ) cout << *Arm;
else cout << *Leg;
}
return 0;
}
Barring any typos, this should output:
Code:
Arm: number(10), somevar(30), size(50), length(70)
Leg: anothervar(20), yetsomevar(40), size(60), length(80)
Arm: number(10), somevar(30), size(50), length(70)
Leg: anothervar(20), yetsomevar(40), size(60), length(80)
Arm: number(10), somevar(30), size(50), length(70)
Leg: anothervar(20), yetsomevar(40), size(60), length(80)
Arm: number(10), somevar(30), size(50), length(70)
Leg: anothervar(20), yetsomevar(40), size(60), length(80)
Arm: number(10), somevar(30), size(50), length(70)
Leg: anothervar(20), yetsomevar(40), size(60), length(80)