I think what you are trying to do is as below.note that you need to set "name" correctly for the derived classes either by calling setname method exclusively or in their constructors itself.
class Shape
{
public:
string name;
void setName( const string &shapeName )
{
name = shapeName;
}
string getName() const
{
return name;
}
void print() const
{
cout<<"Name: "<<getName()<<endl;
}
};
class Circle:public Shape
{
public:
Circle()
{
name = "Circle";
}
};
class Square:public Shape
{
public:
Square()
{
name = "Square";
}
};
int main()
{
Shape* shapesArray[5];
shapesArray[0]->setName("check");
Circle lCircle;
shapesArray[1]=&lCircle;
Square lSquare;
shapesArray[2]=&lSquare;
for(int x = 0; x < 3; x++)
{
shapesArray[x]->print();
}
}