2011-07-28 102 views
0

我不明白'返回'在數據封裝中做了什麼。 例如,當定義新方法:提前Objective-C和數據封裝

// Program to access instance variables 
#import <Foundation/Foundation.h> 

@interface Fraction: NSObject 
{ 
    int numerator; 
    int denominator; 
} 

-(void) print; 
-(void) setNumerator: (int) n; 
-(void) setDenominator: (int) d; 
-(int) numerator; 
-(int) denominator; 

@end 

@implementation Fraction 
-(void) print 
{ 
NSLog (@"%i/%i", numerator, denominator); 
} 

-(void) setNumerator: (int) n 
{ 
numerator = n; 
} 

-(void) setDenominator: (int) d 
{ 
denominator = d; 
} 

-(int) numerator 
{ 
return numerator; 
} 

-(int) denominator 
{ 
return denominator; 
} 

@end 

int main (int argc, char *argv[]) 
{ 
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
Fraction *myFraction = [[Fraction alloc] init]; 

// Set fraction to 1/3 

[myFraction setNumerator: 1]; 
[myFraction setDenominator: 3]; 

// Display the fraction 

NSLog (@"The value of myFraction is: %i/%i", [myFraction numerator], [myFraction denominator]); 

[myFraction release]; 
[pool drain]; 

return 0; 
} 

感謝

+1

你可以請張貼更多的上下文,一個完整的類定義? – Nico

+1

在提出問題之前,請嘗試學習如何使用C,然後如何使用Obj-C。 – jtbandes

+0

@jtbandes - 爲什麼先學習C?你會對C++提問者說一樣嗎? – KevinDTimm

回答

1

,如果你有一個類分數:

@interface Fraction{ 
    int _numerator; 
    int _denominator; 
} 

-(int) numerator; 
-(int) denominator; 

@end 


@implementation Fraction 

–(int) numerator 
{ 
return _numerator; 
} 

–(int) denominator 
{ 
return _denominator; 
} 

//setters 

@end 

然後我們可以使用這個類在其他類來獲得分子對象的分子/分母:

//some other class 
Fraction* fraction = [[Fraction alloc]init]; 
//set numerator/denominator 
int fractionNumerator = [fraction numerator]; 

我們h上面完成的ave創建一個Fraction對象,然後調用它的getNumerator方法返回一個int。我們通過將它分配給fractionNumerator來捕獲這個返回值。

我希望這是你以後的樣子..

+1

我編輯了代碼,以更好地遵循標準的可可約定。只有當你通過參數中的指針返回某些東西時才能使用'get ...'。你不應該把'get'放在標準的getter中。否則,當你使用KVC時會有很大的問題。 – Yuji