Этот фрагмент кода является классическим примером динамического связывания в Objective-C
[1]
float total = tareWeight; // start with weight of empty container
int i, n = [self size]; // n = number of members
for (i = 0; i < n; ++i) { // loop over each member
id member = [self at:i]; // get next member
total += [member weight]; // accumulate weight of contents
}
return total; // return total weight to caller
Итак, как программист с некоторым опытом в этом языке и делающий мой первый
шаги в C ++, я хотел бы знать: как это будет реализовано в C ++, учитывая
что он также поддерживает какую-то позднюю привязку?
В этом примере мы предполагаем, что каждый член может быть любого класса, однако
Конечно, реализация метода weight
обязательна. В наши дни механизмы
аналогичные протоколы также могут быть использованы для обеспечения реализации
совместим (тогда объявляется member
как id<Matter>
), но это не нужно в
все, чтобы иметь возможность работать.
В C ++ создание суперкласса с так называемыми виртуальными функциями
единственная альтернатива?
Редактировать
Просто чтобы уточнить, приведенный выше код можно рассматривать как метод класса контейнера
который возвращает общий вес его компонентов. Вы не знаете заранее
Что будет на контейнере, это может быть любой объект. Вы знаете только это
эти объекты отвечают на сообщение weight
.
[1] Объектно-ориентированное программирование, эволюционный подход, 2nd
Издание, 1991 - Брэд Дж. Кокс, Эндрю Дж. Новобильски - Глава 4 Page 65