ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
TPoint *data[N]; // массив фигур… }; В последствии в переменную data можно записывать как адреса объектов класса TPoint, так и адреса объектов всех производных типов, в т.ч. и TCircle. Итак, теперь мы создали класс Проблема в том, что на этапе компиляции неизвестно, метод какого класса нужно вызывать. Решение: механизм позднего связывания. Главная идея – адрес вызываемого метода определяется динамически, во время работы программы. В C++ концепция позднего связывания реализуется использованием т.н. виртуальных методов. Виртуальный метод: объявлен с ключевым словом virtual в базовом классе; во всех производных классах его прототип в точности совпадает с прототипом метода в базовом классе. virtual <тип_рез> <Имя_метода>(<список_парам>); class TPoint { private: int x, y; protected: visible; public: TPoint(int _x = 0, int _y = 0, _vis = 0): x(_x), y(_y), visible(_vis) {} ~TPoint() {}; int IsVisible() const { return visible; } virtual void Show() { printf("%d %d ", x, y); visible = 1; } } }; class TCircle: public TPoint { private: int r; public: TCircle(int _x = 0, int _y = 0, _r = 0, _vis = 0): TPoint(_x, _y, _vis), r(_r) {} ~TCircle() {}; void Show() { if (!visible) { TPoint::Show(); }} }; class TPlane { public: Int n; // количество фигур Не нашли, что искали? Воспользуйтесь поиском:
|