1

我正在从斯坦福在线课程中学习面向对象的编程,其中有一部分关于声明我不确定。我以为你必须总是在头文件中声明原型,然后在实现文件中编写代码,但是教授在实现中写了一个方法,而在头文件中没有声明原型,怎么会?

另外,有人可以澄清一下私有和公共之间的区别,以及没有原型的方法是公共的还是私有的?没有原型的方法不是来自超类。

4

2 回答 2

2

如果您在头文件中编写该方法,则它是公共的并且可供其他类/对象访问。如果您没有在头文件中声明它,则该方法是一个私有方法,这意味着您可以在您的类内部访问它,但没有其他类可以使用此方法。

于 2012-06-20T07:24:49.310 回答
2

这是一种完全合法的方式来声明不能在类实现本身之外使用的方法。

只要方法在使用它们的方法之前,编译器就会在实现文件中找到方法。然而,情况并非总是如此,因为新的 LLVM 编译器允许以任何顺序声明方法并从给定文件中引用。

在实现文件中声明方法有几种不同的风格:

//In the Header File, MyClass.h
@interface MyClass : NSObject
@end

//in the implementation file, MyClass.m
//Method Decls inside a Private Category
@interface MyClass (_Private)
    - (void)doSomething;
@end

//As a class extension (new to LLVM compiler)
@interface MyClass ()
    - (void)doSomething;
@end

@implementation MyClass
//You can also simply implement a method with no formal "forward" declaration
//in this case you must declare the method before you use it, unless you're using the
//latest LLVM Compiler (See the WWDC Session on Modern Objective C)
- (void)doSomething {
}

- (void)foo {
    [self doSomething];
}
@end
于 2012-06-20T07:33:31.510 回答