Objective - C基础: 第一天 - 7.第二个OC类练习
之前我们讲解了第一个OC类, 但还有一些更加细节的东西没有讲解, 下面让我们继续来看看吧~~~
#import <Foundation/Foundation.h>
@interface Preson : NSObject
{
@public
int age;
double weight;
}
- (void)walk;
@end
@implementation Preson
- (void)walk
{
NSLog(@"有一个%d岁的人在走路, 他的体重是%.2f/kg", age, weight);
}
@end
int main()
{
Preson *p = [Preson new];
p->age = 20;
p->weight = 50.5;
[p walk];
Preson *p2 = [Preson new];
p2->age = 30;
p2->weight = 60.0;
[p2 walk];
return 0;
}这里我们详细的分析一下, 看下面的示意图:
我们利用Proson这个类创建了两个对象, 虽然它们有相同的成员变量, 但它们却相互不受影响, 因为它们的地址是互不相同的, 而- (void)walk这个方法是它们所公用的一个方法, 谁去调用它, 那么输出的age和weight就是谁的.
如果我们改一下:
Preson *p = [Preson new];
p->age = 30;
Preson *p2 = [Preson new];
p2->weight = 55.5;
[p walk];
[p2 walk];输出的结果是:
2015-01-13 16:12:16.495 a.out[6631:641703] 有一个30岁的人在走路, 他的体重是0.00/kg 2015-01-13 16:12:16.496 a.out[6631:641703] 有一个0岁的人在走路, 他的体重是55.50/kg
再改一下:
Preson *p = [Preson new];
p->age = 30;
Preson *p2 = p;
p2->weight = 55.5;
[p walk];
[p2 walk];
输出的结果是:
2015-01-13 16:13:25.043 a.out[6637:642493] 有一个30岁的人在走路, 他的体重是55.50/kg 2015-01-13 16:13:25.044 a.out[6637:642493] 有一个30岁的人在走路, 他的体重是55.50/kg
如果基础比较好的人肯定知道这是为什么, 不知道也没事, 我们下面来看看示意图:
看完示意图的人应该就知道了, 当p2存了p的地址时, 那么p2改了什么值, p也要跟着改, 因为它们的地址都是一样, 因为它们共用的一样的成员:
2015-01-13 16:19:44.991 a.out[6669:646229] 0x7f93c340e000 0x7f93c340e000
Preson *p = [Preson new];
p->age = 30;
p->weight = 60.0;
Preson *p2 = [Preson new];
p2->age = 40;
p2->weight = 55.5;
p = p2;
p->age = 20;
[p walk];
这个例子也是如此.
好啦, 这次我们就讲到这里了, 下次我们继续~~~~

浙公网安备 33010602011771号