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. Spring Boot多数据源配置(二)MongoDB

    在Spring Boot多数据源配置(一)durid.mysql.jpa 整合中已经讲过了Spring Boot如何配置mysql多数据源.本篇文章讲一下Spring Boot如何配置mongoDB多 ...

  2. 编译Code::Blocks源码 with MinGW on Win

    Build Code::Blocks源码 ---By 狂徒归来 CodeBlocks是一款非常优秀的IDE !可惜的是没有64位的版本,而且本来是轻量级别的IDE就应该够轻,能够像记事本工具一样,迅速 ...

  3. Oracle常用数据库系统表单以及SQL的整理

    因为最近涉及到了一些数据库的归档,备份等工作,所以一部分的重心放在了数据库上,毕竟之前对数据库的了解也只停留在了一般的建表,查询,最多最多再写一写触发器之类的东西. 通常都是自己瞎搞搞,也就懂一点皮毛 ...

  4. eclipse 运行错误:在类XXX中找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args) 否则 JavaFX 应用程序类必须扩展javafx.application.Application

    新建了一个类Hello: 代码: 第一次运行报错: 点击关闭该类的界面时出现: 点击是,然后再次打开,可以正确执行,结果为: 这是为什么....,后来发现了原因:是每次运行或调试前没有自动保存编辑的内 ...

  5. 使用common-fileUpload实现文件上传

    通过common-fileUpload文件上传组件,可以实现上传文档.图片等资料.根据程序的不同要求,它可以有多种方式的应用. 我们这里介绍一种简单的例子,来实现文件上传功能. 准备: 引入相关组建的 ...

  6. Hexo博客收录百度和谷歌-基于Next主题

    Hexo博客收录百度和谷歌-基于Next主题(应该是比较全面的一篇教程) 我们的博客做出来当然是希望别人来访问,但是Github和Coding都做了防爬虫处理,这样子我们博客可能就无法被搜索引擎收录, ...

  7. 【Python】- pytharm 中import时无法识别自己写的程序

    右键点击自己的工作空间,找下面的Mark Directory as(将目录标记为) 选择Source Root,就可以解决上面的问题了,如图

  8. hdu 1007 Quoit Design (最近点对问题)

    Quoit Design Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  9. 洛谷 P3168 [CQOI2015]任务查询系统 解题报告

    P3168 [CQOI2015]任务查询系统 题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分. 超级计算机中的任务用三元组\((S_i,E_i,P_i) ...

  10. JavaScript各变量类型的判断方法

    我们很容易被漂亮的代码吸引,也不知不觉的在自己的代码库中加入这些.却没有冷静的想过它们的优劣.这不,我就收集了一系列形如 "是否为……?" 的判断的boolean函数. isNul ...