在Objective-C++中重载[]运算符

Overloading the [] operator in Objective-C++

本文关键字:运算符 重载 Objective-C++      更新时间:2023-10-16

可能重复:
我可以在Objective-C中重载运算符吗?

在objective-C++中,是否可以重载消息传递运算符,即[]?有可能和"."一样吗?

运算符重载只是C++的一个特性,而不是Objective-C的特性。看看这个问题:我可以在Objective-C中重载运算符吗?

根据我对C++的了解(不知道它在Objective-C++中得到了完全支持),你可以重载[]运算符,但不能重载。操作员,您可以在这里阅读。

编辑(JefferyThomas ty输入后):Objective-C++不支持重载消息传递运算符。我给出的答案是正确的,但没有应用该运算符(仅适用于数组下标或c++的其他"特性")

好吧,这取决于你想让过载的消息传递做什么。

ObjectiveC中的消息传递是动态的,您可以在多个级别将代码插入到消息传递系统中。最简单的是消息转发。除此之外,还有动态方法解析和从运行时使用class_replaceMethod()

Objective-C属性的点运算符是消息传递的捷径。它的工作原理就像消息传递调用-prop-setProp:来获取和设置属性一样。

C结构的点运算符不可重载。

对于重载c++下标运算符,

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

这就是它通常的样子。int&用于返回参考,因此您可以编写

MyClass a;
a[1] = 3;

如果没有int&,您只能访问而不能修改它。请在此处阅读更多信息。

不能在Objective-C中重载运算符。关于您过载"."的问题,只有一些操作员可以过载,这就是:

+    -    *    /    =    <    >    +=   -=   *=   /=   <<   >>
<<=  >>=  ==   !=   <=   >=   ++   --   %    &    ^    !    |
~    &=   ^=   |=   &&   ||   %=   []   ()   ,    ->*  ->   new 
delete    new[]     delete[]