您的位置:首页 > 移动开发 > Objective-C

OC 点语法 和 成员变量作用域

2015-04-14 17:30 453 查看

1 点语法

    OC中点语法是对象成员set方法和get方法的一种简写形式. 使用更方便,更直观
//
//  Person.h
//  点语法
//
//  Created by LiuWei on 15/4/14.
//  Copyright (c) 2015年 LiuWei. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
int _age;
}

- (void)setAge: (int)age;
- (int)age;
@end

//
//  Person.m
//  点语法
//
//  Created by LiuWei on 15/4/14.
//  Copyright (c) 2015年 LiuWei. All rights reserved.
//

#import "Person.h"

@implementation Person

- (void)setAge:(int)age
{
_age = age;
}

- (int)age
{
return _age;
}
@end


//
//  main.m
//  点语法
//
//  Created by LiuWei on 15/4/14.
//  Copyright (c) 2015年 LiuWei. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[])
{
Person *p = [Person new];
p.age = 20; // 这段代码相当于 [p setAge:20];

NSLog(@"p.age = %i", p.age); // p.age 相当于 [p age];
return 0;
}


2 成员变量作用域

成员变量作用域修饰符的作用
@public     成员变量在任何地方都
4000
可以通过对象名或对象方法进行访问
@private   成员变量只能在当前类对象方法中访问, 子类的对象方法中无法访问
@protected  成员变量在当前类及子类对象方法中可以访问, 外部不能直接访问
//
//  Person.h
//  成员变量访问作用域
//
//  Created by LiuWei on 15/4/14.
//  Copyright (c) 2015年 LiuWei. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
@public // 任何地方都可以对成员变量进行访问
int _age; // 年龄

@private // 只能在当前类的对象方法中使用
NSString *_name; // 姓名

@protected  // 只能在本类及子类对象方法中使用,不能被外部直接调用,
double _weight; // 体重

// 如果没有加任何作用域修饰符   默认作用域为 @protected
double _heigh; // 身高
}

// _age的set和get方法
- (void)setAge: (int)age;
- (int)age;

// _name的set和get方法
- (void)setName: (NSString*)name;
- (NSString*)name;

// _weight的set和get方法
- (void)setWeight: (double)weight;
- (double)weight;

// _heigh的set和get方法
- (void)setHeigh: (double)heigh;
- (double)heigh;
@end


//
//  Person.m
//  成员变量访问作用域
//
//  Created by LiuWei on 15/4/14.
//  Copyright (c) 2015年 LiuWei. All rights reserved.
//

#import "Person.h"

@implementation Person

- (void)setAge:(int)age
{
_age = age;
}

- (int)age
{
return _age;
}

- (void)setName:(NSString *)name
{
_name = name;
}

- (NSString *)name
{
return _name;
}

- (void)setWeight:(double)weight
{
_weight = weight;
}

- (double)weight
{
return _weight;
}

- (void)setHeigh:(double)heigh
{
_heigh = heigh;
}

- (double)heigh
{
return _heigh;
}
@end

//
//  Student.h
//  成员变量访问作用域
//
//  Created by LiuWei on 15/4/14.
//  Copyright (c) 2015年 LiuWei. All rights reserved.
//

#import "Person.h"

@interface Student : Person

- (void)useName;
@end

//
//  Student.m
//  成员变量访问作用域
//
//  Created by LiuWei on 15/4/14.
//  Copyright (c) 2015年 LiuWei. All rights reserved.
//

#import "Student.h"

@implementation Student
- (void)useName
{
// _name = @"huahua"; _name 在父类中被声明为@private 所以不能在子类对象方法中使用
NSLog(@"_name 在父类中被声明为@private 所以不能在子类对象方法中使用");
NSLog(@"_weight = %f   _heigh = %f", _weight, _heigh); // _weight _heigh都是@protected作用域所以可以在子类方法中调用
}

@end

//
//  main.m
//  成员变量访问作用域
//
//  Created by LiuWei on 15/4/14.
//  Copyright (c) 2015年 LiuWei. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Student.h"

int main(int argc, const char * argv[])
{
Person *p = [Person new];

p.age = 20; // 这段代码相当于 [p setAge:20];
p->_age = 29; // _age成员变量可以在main中直接访问

p.name = @"无名";
p.weight = 55.3;
p.heigh = 1.78;

Student *s = [Student new];

s.age = 22;
s->_age = 21;  // 父类中成员变量作用域属性设置为@public, 在子类中同样也是@public

s.name = @"小李"; // _name为@private 子类调用父类的setName方法,所以可以访问_name成员变量
s.weight = 48.9;
s.heigh = 1.81;

[s useName];

return 0;
}


父类方法,外部方法,子类方法, 可访问成员变量关系示意图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  objective c
相关文章推荐