Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






TPoint *data[N]; // массив фигур




};

В последствии в переменную data можно записывать как адреса объектов класса TPoint, так и адреса объектов всех производных типов, в т.ч. и TCircle.

Итак, теперь мы создали класс
“Координатная плоскость” и хотим реализовать там метод Show(), который вызывает метод Show() для всех находящихся на плоскости фигур.

Проблема в том, что на этапе компиляции неизвестно, метод какого класса нужно вызывать.

Решение: механизм позднего связывания. Главная идея – адрес вызываемого метода определяется динамически, во время работы программы.

В 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() {
if (!visible) {

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();
printf("%d ", r);

}}

};

class TPlane {

public:

Int n; // количество фигур






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных