1

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

在objective-C++中,是否可以重载消息传递运算符,即[]?是否可以与“。”相同?

4

3 回答 3

1

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

根据我对 C++ 的了解(不知道它在 Objective-C++ 中的完全支持),您可以重载 [] 运算符,但不能重载 . 运算符,您可以在此处阅读。

编辑(在 JefferyThomas ty 的输入之后):Objective-C++ 不支持重载消息传递操作符。我给出的答案是正确的,但不适用于该运算符(仅适用于数组下标或 c++ 的其他“功能”)

于 2012-09-10T12:44:51.523 回答
0

好吧,这取决于您希望重载的消息传递做什么。

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

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

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

于 2012-09-10T13:13:11.560 回答
0

为了重载 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[]
于 2012-09-10T13:01:59.773 回答