#include <iostream>
using namespace std;
class ShapeTwoD
 { 
   public:
      virtual int get_x(int);
   protected:
    int x;
 };
class Square:public ShapeTwoD
{    
    public:
      void set_x(int,int);
      int get_x(int);
       private:
        int x_coordinate[3];
        int y_coordinate[3];
};
int main()
 {
    Square* s = new Square;
s->set_x(0,20);
cout<<s->get_x(0)
    <<endl;
    ShapeTwoD shape[100];
    shape[0] = *s;
cout<<shape->get_x(0); //outputs 100 , it doesn't resolve to 
                           //  most derived function and output 20 also
 }
void Square::set_x(int verticenum,int value)
{
  x_coordinate[verticenum] = value;
}
int Square::get_x(int verticenum)
{
  return this->x_coordinate[verticenum];
}
 int ShapeTwoD::get_x(int verticenum)
 {
   return 100;
 }
shape[0] has been initialised to Square . When i call shape->get_x , i cant understand why shape->get_x does not resolve to the most derived class instead it resolves to the base class method of shape->get_x . I have already made the get_x method virtual in my base class .
Can someone explain to me why and how to resolve this issue??
 
    