Objective-C中C++纯虚函数的等价物是什么?

For*_*est 10 c++ virtual protocols objective-c

简单的答案是议定书.

另一点是,据说ObjectC中的所有方法都是虚拟的,所以不需要在ObjC中说虚拟.

我发现很难理解这个概念.

有什么评论可以更清楚地解决这个问题吗?

感谢您的评论.

Jer*_*myP 13

简单的答案是议定书.

简单但错误.协议是接口规范.它是一个对象必须(暂时忽略@optional关键字)响应的消息集合.

术语"虚函数"在Objective-C中没有直接的对应物.在Objective-C中,您不会在对象上调用函数,而是向它们发送消息.然后,对象本身决定如何响应消息,通常是通过查找其类对象中的消息,查找关联的方法并调用它.请注意,这一切都发生在运行时,而不是编译时.

消息(或"选择器"给他们的技术术语)和方法之间的映射完全是由@implementation.方法声明@interface只是为了给编译器提供所需的信息,以警告您可能忘记了方法实现.它只是一个警告,因为直到运行时才能判断对象是否确实对消息做出了响应.例如,其他人可以将类别添加到为缺失方法提供实现的现有类,或者类可以覆盖forwardingTargetForSelector:以转发它不响应其他地方的消息.

  • 不,真的.这可能是唯一的区别,但它是一个根本的区别.在Objective-C中,您确实发送了一条消息.选择器只是`obj_msg_send`的参数之一,对象确实决定在运行时如何处理它.这不能说是C++.我不是说Objective-C方式必然更好,但它根本不同. (2认同)