Перегрузка оператора [] в Objective-Stack Overflow

Возможный дубликат:
Могу ли я перегрузить оператор в Objective-C?

Можно ли в target-C ++ перегрузить оператор передачи сообщений, то есть []? Возможно ли то же самое с «.»?

1

Решение

Ну, это зависит от того, что вы хотите, чтобы ваше перегруженное сообщение передавало.

Передача сообщений в Objective C является динамической, и вы можете вставить код в систему передачи сообщений на нескольких уровнях. Самый простой Пересылка сообщений. Помимо этого, есть Разрешение динамического метода и используя class_replaceMethod() от время выполнения.

Точечный оператор для свойств Objective C является сокращением для передачи сообщений. Он работает так же, как при передаче сообщений -prop а также -setProp: для получения и установки собственности.

Точечный оператор для структур C не перегружен.

0

Другие решения

Перегрузка операторов только в C ++, а не в Objective-C. Посмотрите на вопрос:
Могу ли я перегрузить оператор в Objective-C?

Насколько я знаю C ++ (не знаю, полностью ли он поддерживается в Objective-C ++), вы можете перегрузить оператор [], но не оператор. Оператор, как вы можете прочитать Вот.

редактировать (после ввода JefferyThomas ty): Objective-C ++ не поддерживает перегрузку оператора передачи сообщений. Ответ, который я дал, является правильным, но он не применяет этот оператор (только для подписки на массив или других «особенностей» c ++)

1

Для перегрузки оператора индекса C ++,

class MyClass {
private:
int myList[10];
public:
int& operator [] (const int index) {return myList[index];} // Check for index out of bounds if necessary.
};

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

MyClass a;
a[1] = 3;

Без инт&, вы можете только получить доступ, а не изменять его. Прочитайте больше Вот.

Вы не можете перегружать операторы в Objective-C.
Что касается вашего вопроса о перегрузке «.», Есть только несколько операторов, которые вы можете перегрузить, а именно:

+    -    *    /    =    <    >    +=   -=   *=   /=   <<   >>
<<=  >>=  ==   !=   <=   >=   ++   --   %    &    ^    !    |
~    &=   ^=   |=   &&   ||   %=   []   ()   ,    ->*  ->   new
delete    new[]     delete[]
0
По вопросам рекламы [email protected]