Позднее связывание и цель-c 2.0 - PullRequest
0 голосов
/ 05 ноября 2011

Прежде чем начать, позвольте мне спросить, что в target-c 2.0 у вас может быть указатель базового класса, ссылающийся на объект подкласса?

Если это так, то есть что-то похожее на виртуальные функции-члены c ++ в target-c.

Например, если объект подкласса вызывается из указателя базового класса, вызовет ли он метод подкласса (он правильно переопределяет метод базового класса)? Будет ли он принудительным, как Java, или программист будет контролировать его?

Редактировать: можно ли присвоить любой тип указателя другому, каков предел? Пример: Можете ли вы сказать

Подкласс * s = ... Базовый класс * b = s

Или это можно сделать только распределением?

1 Ответ

1 голос
/ 05 ноября 2011

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

Subclass s* = /* get an object instance */
Baseclass b* = s;

возможно (это не должно быть во время инициализации). Нет предела.

Функциональность, подобная «виртуальному методу», похожа на Java, поэтому каждый метод является виртуальным, поэтому вы не можете его контролировать (например, всегда вызывается метод подкласса). Сообщения, отправляемые объектам, по сути, имеют позднюю привязку.

См. Реализация чисто виртуального метода в Objective-C .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...