私はStephen Kochanの例「Programming in Objective-C、Edition 4」を使って、WindowsベースのGNUstep環境を使ってプログラム言語を学んでいます。私はgnustep mysys-system-0.29.0、gnustep-core-0.29.0とgnustep-devel-1.4.0のインストールを使用しています。なぜ2つの一意のオブジェクトのインスタンス変数がメモリの場所を参照していますか?
今、コチャンの本の第3章のプログラムに。 ソースコードを実行すると、2つのunqiueオブジェクトの同じインスタンス変数値、 'frac1'と 'frac2'が表示されます。 'frac1'オブジェクトのインスタンス変数のメモリ位置は、 'frac2'オブジェクトの同じメモリ位置を参照するように見えます。
'frac2'で分子を3に、分母を7に設定すると、 'frac1'の分子と分母が上書きされます。どうして?何故かはわからない?。私は、 'frac1'と 'frac2'の一意のインスタンス変数を印刷するときに同じ分数3/7を表示します。以下は
は、私がコンパイルしたソースプログラムである:
//========================
// ##copied from "Programming in Objective C" pages 30-44 - edition 4
#import <Foundation/Foundation.h>
// --- @interface section ----
@interface Fraction:NSObject
- (void)print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;
@end
//[email protected]
#include <stdio.h>
@implementation Fraction
//{
int numerator;
int denominator;
//}
- (void)print
{
NSLog (@"%i/%i", numerator, denominator);
}
-(void) setNumerator: (int) n
{
numerator = n;
}
-(void) setDenominator: (int) d
{
denominator = d;
}
@end
//--- program section ----
int main(int argc, const char * argv[])
{
//Fraction *myFraction;
// Create an instance of a Fraction
//myFraction = [Fraction alloc];
//myFraction = [myFraction init];
Fraction *frac1;
frac1 = [Fraction alloc];
frac1 = [frac1 init];
Fraction *frac2 = [[Fraction alloc] init];
// Set 1st fraction to 2/3
[frac1 setNumerator: 2];
[frac1 setDenominator: 3];
// Set 2nd fraction to 3/7
[frac2 setNumerator: 3];
[frac2 setDenominator: 7];
// Display the fractions
// 'frac1' print should display fraction 2/3, however 3/7 is displayed
NSLog (@"first print is:");
[frac1 print];
// 'frac2' print displays fraction 3/7, as expected.
NSLog (@"second print is:");
[frac2 print];
return 0;
}
//========================
ありがとうございました。ここでは、インスタンス変数を実装セクションからインターフェイスセクションに移動しました。 –