一 概述
- 我们之前介绍的OC程序,属性值被public修饰,无法控制外界对OC属性值的设置,这样就有可能导致程序设计问题(如Student的年龄属性age可能出现负值的情况,不符合实际情况)。
- 这种情况,可以通过封装得到解决(去掉public修饰符,自己指定setAge方法,并对年龄出现负值的情况进行干预)
二 封装的基本使用(set方法和get方法)
2.1 set方法
声明和实现
复制
1 2 3 4 5 6 7 8 9 10 | //set方法声明 -(void)setAge:(int)newAge; //set方法实现 { if(newAge<-0) { newAge=1; } age=newAge; } |
set方法说明
- 作用:用来设置成员变量,可以在方法里面过滤掉一些不合理的值
- 命名规范:
- 方法都是以set开头,而且后面跟上成员变量名,成员变量名的首字母必须大写
- 形参名称不要跟成员变量同名
2.2 get方法
声明与实现
复制
1 2 3 4 5 6 | //get方法声明 -(int)age; //get方法实现 { return age; } |
get方法说明
- 作用:返回对象内部的成员变量
- 命名规范:get方法的名称一般就同成员变量同名
三 代码实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #include <Foundation/Foundation.h> @interface Student : NSObject { //@public int age; } -(void)study; -(void)setAge:(int)newAge; -(int)age; @end @implementation Student -(void)study { NSLog(@"%d岁的学生在学习",age); } -(void)setAge:(int)newAge { if(newAge<-0) { newAge=1; } age=newAge; } -(int)age { return age; } @end int main() { Student *stu=[Student new]; //stu->age=20; [stu setAge:-10]; NSLog(@"学生的年龄时%d岁",[stu age]); //[stu study]; return 0; } |