Полиморфизм и виртуальные методы
class Point
{
...
public:
...
virtual void Show ();
virtual
void Hide ();
void MoveTo (int newX, int newY);
};
...
реализация методов класса Point
...
class Circle: public Point
{
...
public:
... // без метода MoveTo()
virtual void Show ();
virtual void Hide ();
};
...
реализация методов класса Circle
...
Point pointObj (100,20); // объект базового класса
Circle circleObj (20,30,10); // объект производного класс
Point *pointPtr; // указатель базового класса
pointPtr = & pointObj; // указывает на объект базового класса
pointPtr = & circleObj; // указывает на объект производного класса
pointPtr = & pointObj;pointPtr->MoveTo(10,10);
pointPtr = & circleObj;
pointPtr -> Expand(12);
pointPtr = & pointObj;
pointPtr->Show(10,10); // вызов Show() объекта pointObj класса Point
pointPtr = & circleObj;
pointPtr->Show(10,10); // вызов Show() объекта circleObj класса Circle
void JumpFigure (Point* AnyFigure, int h)
{
int oldX = AnyFigure->GetX();
int oldY = AnyFigure->GetY();
delay(100); // временная задержка на 0.1 сек
AnyFigure->MoveTo (oldX, oldY-h); // "прыжок"
delay(100); // временная задержка на 0.1 сек
AnyFigure->MoveTo (oldX, oldY); // на исходную позицию
}