比较类语法帮助中的对象;

时间:2013-11-10 17:45:52

标签: c++ objective-c class object

我更有信心使用C ++而不是客观c,我只是有一个愚蠢的问题,试图比较两个对象(我正在构建的UniqueWord类)。我一直收到错误, 期待一种;这是一个基本问题,但我也想解释一下我是怎么做错的,这就是我用C ++写的。工作得很好

private:

  vector <int> LineNumbers;
  string wordCatalog;// the current word in the line number
  int newIndex(const int);
public:

  UniqueWord(const string,const int);//creates the unique word object
  ~UniqueWord(void);

  void addLine(const int);
  static int compare(const UniqueWord&, const UniqueWord&);//my issue here
  string toString() const;

现在我的问题是在Objective C中输入这个,我对Objective-C中的类很新,所以对我来说这就是我在Objective_c中输入的内容

@interface UniqueWord : NSObject
@property NSMutableArray *LineNumbers;
@property NSString *wordCatalog;
UniqueWord *UWord(const NSString*, const int);//creates a unique word object
int newIndex(const int);

-(void) addLine:(const int)line;
-(static NSInteger) compare:(UniqueWord *self)a with:(UniqueWord *self)b;//my issue
-(NSString*) toString;

@end

我真的很感激解释基本的语法规则(用现代语言解释)所以下次我不会遇到这个麻烦,谢谢。再一次,我对Objective C不太自信

在旁注可以有人告诉我,如果我的uniqueWord构造函数对吗?它说//创建一个独特的单词对象

2 个答案:

答案 0 :(得分:3)

Objective-C中没有static个方法 - 你需要一个类方法。将-替换为声明前面的+,如下所示:

+(NSInteger) compare:(UniqueWord *self)a with:(UniqueWord *self)b;

类方法类似于C ++静态成员函数,但由于方法调度是在Objective-C中更加动态地实现的,因此您可以在派生类中为它们提供覆盖。

上面会编译。但是,这将成为Objective-C的惯用语,因为Cocoa使用NSComparisonResult而不是NSInteger作为比较方法的返回类型:

+(NSComparisonResult) compare:(UniqueWord *self)a with:(UniqueWord *self)b;

此外,C ++的构造函数是通过指定的初始化器实现的:这个

UniqueWord *UWord(const NSString*, const int);

应如下所示:

-(id)initWithString:(NSString*)str andIndex:(NSInteger)index;

和/或像这样:

+(id)wordWithString:(NSString*)str andIndex:(NSInteger)index;

答案 1 :(得分:1)

我认为更好的建议是实现实例compare:方法。 A good answer is here

有充分的理由这样做,具体来说,您要对新的compare:方法做的下一件事就是排列一系列独特的单词。 @dasblinkenlight建议的类方法(具有无可挑剔的语法)将迫使您写下自己的排序。实例compare:提供了紧凑且可能更有效的替代方案:

[myArrayFullOfUniqueWords sortUsingSelector:@selector(compare:)];