在objective-C++中,是否可以重载消息传递运算符,即[]?是否可以与“。”相同?
3 回答
运算符重载只是 C++ 的一个特性,而不是 Objective-C 的特性。查看问题: 我可以在 Objective-C 中重载运算符吗?
根据我对 C++ 的了解(不知道它在 Objective-C++ 中的完全支持),您可以重载 [] 运算符,但不能重载 . 运算符,您可以在此处阅读。
编辑(在 JefferyThomas ty 的输入之后):Objective-C++ 不支持重载消息传递操作符。我给出的答案是正确的,但不适用于该运算符(仅适用于数组下标或 c++ 的其他“功能”)
好吧,这取决于您希望重载的消息传递做什么。
Objective C 中的消息传递是动态的,您可以在多个级别将代码插入到消息传递系统中。最简单的是消息转发。除此之外,还有动态方法解析和运行时使用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[]