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

时间:2010-12-07 08:29:20

标签: c++ objective-c virtual protocols

简单的答案是协议。

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

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

有任何意见可以更明确地解决这个问题吗?

感谢您的评论。

2 个答案:

答案 0 :(得分:13)

  

简单的答案是协议。

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

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

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

答案 1 :(得分:2)

Objective-C中对象的方法不是虚函数,它们是真正的函数。

我不同意,Obj-C中的方法并不像人们期望的那样真实。它们的行为就像C ++中的虚函数一样,除了你不能在Objective-C中创建一个'纯虚拟'函数。

干杯, Raxit