@gg123xyz here's another example. this time including dynamic cast. its to separate the users classes' from each other so they don't tamper with each other classes.
#include<iostream>
#include<string>
using namespace std;
class Creature
{
public:
Creature();
virtual void SetName(string name);
virtual string GetName();
virtual void ObjectFunction()
{
cout << "ObjectFunction called. ";
}
private:
protected:
string Name;
};
class Goblin : public Creature
{
public:
Goblin();
private:
virtual void SetName(string name) override;
virtual string GetName() override;
virtual void ObjectFunction() override
{
cout << "GoblinFunction called. ";
}
};
class Unicorn : public Creature
{
public:
Unicorn();
private:
virtual void SetName(string name) override;
virtual string GetName() override;
virtual void ObjectFunction() override
{
cout << "UnicornFunction called. ";
}
};
int main()
{
Creature* ptrToCreature = new Creature;
cout << "Creature object made\n\n";
Goblin* ptrToGoblin = new Goblin;
cout << "Goblin object made\n\n";
Unicorn* ptrToUnicorn = new Unicorn;
cout << "Unicorn object made\n\n";
Creature* ObjectArray[] = { ptrToCreature, ptrToGoblin, ptrToUnicorn};
cout << "ObjectArray object made\n\n";
ObjectArray[0]->SetName("Creature");
ObjectArray[1]->SetName("Goblin");
ObjectArray[2]->SetName("Unicorn");
cout << ObjectArray[0]->GetName() << endl;
cout << ObjectArray[1]->GetName() << endl;
cout << ObjectArray[2]->GetName() << endl << endl;
for (int i = 0; i < 3; i++)
{
Creature* obj = ObjectArray[i];
Unicorn* unicrn = dynamic_cast<Unicorn*>(obj);
if (unicrn)
{
obj->ObjectFunction();
cout << "right\n\n";
continue;
}
Goblin* gob = dynamic_cast<Goblin*>(obj);
if (gob)
{
obj->ObjectFunction();
cout << "left\n\n";
continue;
}
Creature* crtr = dynamic_cast<Creature*>(obj);
if (crtr)
{
obj->ObjectFunction();
cout << "up\n\n";
}
}
delete ptrToCreature;
delete ptrToGoblin;
delete ptrToUnicorn;
system("pause");
}
Creature::Creature()
{
cout << "A Creature has been created\n";
}
void Creature::SetName(string name)
{
Name = name;
}
string Creature::GetName()
{
return Name + " dot";
}
Goblin::Goblin()
{
cout << "A Goblin has been created\n";
}
void Goblin::SetName(string name)
{
Name = name;
}
string Goblin::GetName()
{
return Name + " dot dot";
}
Unicorn::Unicorn()
{
cout << "A Unicorn has been created\n";
}
void Unicorn::SetName(string name)
{
Name = name;
}
string Unicorn::GetName()
{
return Name + " dot dot dot";
}