1.封装的注意点

   1:  // 成员变量尽量不要用@public
   2:      // @public
   3:      int age;

   1:    //@public
   2:      // 只读(readonly):只允许外界访问我的no,不允许外界修改我的no
   3:      int no; // 只需要提供get方法

2.get、set方法

   1:  set方法
   2:   1.作用: 提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤
   3:   2.命名规范:
   4:   1> 方法名必须以set开头
   5:   2> set后面跟上成员变量的名称,成员变量的首字母必须大写
   6:   3> 返回值一定是void
   7:   4> 一定要接收一个参数,而且参数类型跟成员变量类型一致
   8:   5> 形参的名称不能跟成员变量名一样

   1:  get方法
   2:   1.作用:返回对象内部的成员变量
   3:   2.命名规范:
   4:   1> 肯定有返回值,返回值类型肯定与成员变量类型一致
   5:   2> 方法名跟成员变量名一样
   6:   3> 不需要接收任何参数

   1:   
   2:  // set方法的实现
   3:  - (void)setAge:(int)newAge
   4:  {
   5:      // 对传进来的参数进行过滤
   6:      if (newAge <= 0)
   7:      {
   8:          newAge = 1;
   9:      }
  10:      
  11:      age = newAge;
  12:  }
  13:   
  14:  - (int)age
  15:  {
  16:      return age;
  17:  }

3.成员变量的命名规范:

一定要以下划线 _ 开头

作用:

1.让成员变量和get方法的名称区分开

2.可以跟局部变量区分开,一看到下划线开头的变量,一般都是成员变量

例子

   1:  // sex的set和get方法
   2:  - (void)setSex:(Sex)sex;
   3:  - (Sex)sex;
   4:   
   5:  // no的set和get方法
   6:  - (void)setNo:(int)no;

4.封装的实际例子

   1:  /*
   2:   4.设计一个成绩类
   3:   * C语言成绩(可读可写)
   4:   * OC成绩(可读可写)
   5:   * 总分(只读)
   6:   * 平均分(只读)
   7:  */
   8:  #import <Foundation/Foundation.h>
   9:   
  10:  @interface Score : NSObject
  11:  {
  12:      int _cScore; // C语言成绩
  13:      int _ocScore; // OC成绩
  14:      
  15:      int _totalScore;// 总分
  16:      int _averageScoe; // 平均分
  17:  }
  18:   
  19:  - (void)setCScore:(int)cScore;
  20:  - (int)cScore;
  21:   
  22:  - (void)setOcScore:(int)ocScore;
  23:  - (int)ocScore;
  24:   
  25:  - (int)totalScore;
  26:  - (int)averageScore;
  27:   
  28:  @end
  29:   
  30:  @implementation Score
  31:  - (void)setCScore:(int)cScore
  32:  {
  33:      _cScore = cScore;
  34:      
  35:      // 计算总分
  36:      _totalScore = _cScore + _ocScore;
  37:      _averageScoe = _totalScore/2;
  38:  }
  39:  - (int)cScore
  40:  {
  41:      return _cScore;
  42:  }
  43:   
  44:  - (void)setOcScore:(int)ocScore
  45:  {
  46:      _ocScore = ocScore;
  47:      
  48:      // 计算总分
  49:      _totalScore = _cScore + _ocScore;
  50:      _averageScoe = _totalScore/2;
  51:  }
  52:  // 监听成员变量的改变
  53:   
  54:  - (int)ocScore
  55:  {
  56:      return _ocScore;
  57:  }
  58:   
  59:  - (int)totalScore
  60:  {
  61:      return _totalScore;
  62:  }
  63:  - (int)averageScore
  64:  {
  65:      return _averageScoe;
  66:  }
  67:  @end
  68:   
  69:   
  70:  int main()
  71:  {
  72:      Score *s = [Score new];
  73:      
  74:      [s setCScore:90];
  75:      [s setOcScore:100];
  76:      
  77:      [s setCScore:80];
  78:      
  79:      
  80:      int a = [s totalScore];
  81:      
  82:      NSLog(@"总分:%d", a);
  83:      
  84:      return 0;
  85:  }

OC语言基础之代码的封装的更多相关文章

  1. OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  2. 李洪强iOS开发之OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  3. OC语言基础之利用property优化封装

    1.property功能用法 1: // @property:可以自动生成某个成员变量的setter和getter声明 2: @property int age;//可以直接免去变量的声明 3: // ...

  4. 黑马程序员——OC语言基础语法 面向对象的思想

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结)(一)基础语法 1)关键字 @interface.@implementati ...

  5. OC语言基础之NSArray

    0.数组的分类 NSArray :不可变数组 NSMutableArray : 可变数组 1: // @[] 只创建不可变数组NSArray 2: /* 错误写法 3: NSMutableArray ...

  6. OC语言基础之NSString

    1.字符串的创建 1: NSString *s1 = @"jack"; 2: 3: //NSString *s2 = [[NSString alloc] initWithStrin ...

  7. OC语言基础之函数与方法

    方法 1.对象方法都是以减号 - 2.对象方法的声明必须写在@interface和@end之间    对象方法的实现必须写在@implementation和@end之间 3.对象方法只能由对象来调用 ...

  8. OC语言基础之NSDictionary

    1.NSDictionary字典的创建 1: // key value 2: // key -==> value 3: NSDictionary *dict = [NSDictionary di ...

  9. OC语言基础之类的本质

    一.类的本质 1: // 类本身也是一个对象,是个Class类型的对象,简称类对象 2: 3: /* 4: 利用Class 创建 Person类对象 5: 6: 利用 Person类对象 创建 Per ...

随机推荐

  1. 如何将自己写的代码上传到github上

    忙活了一下午终于成功把代码上传到github上. 接下来就是我上传代码的步骤: ①首先注册github账号,登录,创建新仓库 ,点击+,点击new repository 得到如下页面,填写仓库名,自己 ...

  2. Vue2 全局过滤器(vue-cli)

    先看官方简介: 当前组件注册: export default { data () { return {} }, filters:{ orderBy (){ // doSomething }, uppe ...

  3. vue 搜索匹配

    computed: { broSeachData: function() { var browesData = this.browesData, searchVal = this.searchVal; ...

  4. POJ 1061 青蛙的约会 | 同余方程和exGcd

    题解: 要求s+px=t+qx (mod L) 移项 (p-q)x=t-s (mod L) 等价于 (p-q)x+Ly=t-s 即ax+by=c的方程最小非负根 exGcd后乘个C #include& ...

  5. BZOJ2716 [Violet 3]天使玩偶 【CDQ分治】

    题目 输入格式 输出格式 输入样例 //样例太长就不贴了.... 输出样例 //见原题 提示 题解 我们将曼哈顿距离式子中的绝对值去掉,每次只考虑x,y比当前点小的更新答案. 为了使所有点都对答案进行 ...

  6. babelrc配置

    { "presets": [ ["env", { // webapck2/3必须配置,放弃使用babel的模块化,使用webpack的模块化,webpack1不 ...

  7. webpack配置优化

    1.使用alias简化路径 alias: { 'vue$': 'vue/dist/vue.esm.js', '@': resolve('src') } 2.overlay界面弹出编译错误 devSer ...

  8. 块元素包裹img空隙问题

    解决方法 1.img设为block2.img对齐方式vertical-align:bottom(middle/top),不是baseline就行3.父容器font-size:0或line-height ...

  9. WebStrom Sass 编译配置 windows

    第一步: 先安装Ruby下载 一路next 安装完成后打开开始菜单 打开后输入 gem install sass sass -v 出现版本号说明成功 第二部配置webstorm 在webstorm中s ...

  10. spring管理事务回滚

    spring 事务回滚 1.遇到的问题 当我们一个方法里面有多个数据库保存操作的时候,中间的数据库操作发生的错误.伪代码如下: ? 1 2 3 4 5 6 7 public method() {    ...