文档章节

第03天OC语言(01):封装基本概念

lyh2017iOS
 lyh2017iOS
发布于 2017/07/13 11:18
字数 606
阅读 3
收藏 0
  • 不要等到明天,明天太遥远,今天就行动。

#####须读:看完该文章你能做什么?

什么是封装,封装有什么好处

#####学习前:你必须会什么?(在这里我已经默认你具备C语言的基础了)

适合所有人,不需要懂的什么 ######注:(小白直接上手)


#####一、本章笔记

 为什么要封装
    成员变量是public 给成员变量赋值的时,赋值的值 不受我们约束(控制)

     封装 : 屏蔽内部实现的细节,仅仅对外提供 共有的方法/接口
     好处 : 保证 数据的安全性
     将变化隔离
     规范 : 一般情况下 不会对外直接暴露成员变量,都会提供一些 共有的方法进行赋值
     成员变量都需要封装起来

#####二、code ######main.m

>>>main.m
#pragma mark 01-封装基本概念
#pragma mark - 代码
#import <Foundation/Foundation.h>
#pragma mark 类

#import "Gun.h"

#pragma mark - main函数
int main(int argc, const char * argv[])
{
    // 1.创建一把枪
    Gun *gp = [Gun new];
    // 2.设置枪的子弹数量
//    gp->_bullet = 100;
#warning 引发这个问题的原因, 因为成员变量是public 给成员变量赋值的时,赋值的值 不受我们约束(控制)
//    gp->_bullet = -100;
    [gp addBullet:100];
    // 3.射击
    [gp shoot];
    
    // 4.查看子弹的剩余数量(获取成员变量的值)
//    NSLog(@"bullet = %i",gp->_bullet);
    NSLog(@"bullet = %i",[gp getBullet]);

    return 0;
}

######Gun

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

@interface Gun : NSObject
{
//    @public
    int _bullet; // 子弹
    // 虽然成员变量 不是public之后 外界不能直接访问了,但是还是可以在本类的对象方法中直接访问
}
// 射击方法
- (void)shoot;


// 提供一个方法用于设置成员变量的值
- (void)addBullet:(int)count;

// 提供一个方法 用于 返回成员变量的值
- (int)getBullet;

@end
>>>.m
#import "Gun.h"
@implementation Gun
- (void)shoot
{
    if(_bullet > 0)
    {
        _bullet--;
        NSLog(@"打了一枪,还剩%i子弹",_bullet);
    }
    else
    {
        NSLog(@"没有子弹");
    }
    
}
// addBullet 就是对成员变量的封装
/*
 封装 : 屏蔽内部实现的细节,仅仅对外提供 共有的方法/接口
 好处 : 保证 数据的安全性
        将变化隔离
 规范 : 一般情况下 不会对外直接暴露成员变量,都会提供一些 共有的方法进行赋值
        成员变量都需要封装起来
 */
- (void)addBullet:(int)count
{
    // 对传入的数据进行过滤
    if (count < 0) {
        count = 0;
    }
    _bullet = count;
}

- (int)getBullet
{
    return _bullet;
}
@end

© 著作权归作者所有

共有 人打赏支持
lyh2017iOS
粉丝 1
博文 357
码字总数 137380
作品 0
朝阳
私信 提问
JavaScript 30天每日效果图

JavaScript 30天每日效果图 在Github上看到了wesbos的一个Javascript30天挑战的repo,旨在使用纯JS来进行练习,不允许使用任何其他的库和框架,该挑战共30天,我会在这里复现这30天遇到的挑战...

黎跃春
2017/07/19
0
0
iOS 简单的使用UIBezierPath绘制

UIBezierPath这个类呢主要用于绘图。 之前的项目中需要绘图的部分都是用Core Graphics来绘制,OC是我的第一门语言,所以对于Core Graphics的C语言API不太适应,最近发现原来苹果的UIKit中已经...

沉恋
2015/03/20
0
0
iOS 编写高质量Objective-C代码(二)

《编写高质量OC代码》已经顺利完成一二三四篇! 附上链接: iOS 编写高质量Objective-C代码(一) iOS 编写高质量Objective-C代码(二) iOS 编写高质量Objective-C代码(三) iOS 编写高质量...

MrLiuQ
2018/08/13
0
0
Object-C基础-01-概述

回到顶部 前言 目前来说,Objective-C(简称OC)是iOS开发的核心语言,在开发过程中也会配合着使用C语言、C++,OC主要负责UI界面,C语言、C++可用于图形处理。近来,流传Ruby、C#也可以开发iOS...

Corwien
2016/03/16
33
0
OC对象,自动释放池,OC与C语言的区别

在C语言中,编程都是面向过程的编程,每一个代码块都严格按照从上至下的顺序执行,在代码块之间同样也是这样, 但是在OC中往往不是这样,OC和C++、java等语言一样,都是面向对象的编程语言,...

老人与海l
2018/08/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

iOS个人中心渐变动画、微信对话框、标签选择器、自定义导航栏、短信验证输入框等源码

iOS精选源码 简单的个人中心页面-自定义导航栏并予以渐变动画 程序员取悦女票的正确姿势---Tip1(iOS美容篇) iOS 前台重启应用和清除角标的问题 微信原生提醒对话框3.0 JHLikeButton - 有趣...

Android爱开源
4分钟前
0
0
Yii2使用驼峰命名的形式访问控制器

yii2在使用的时候,访问控制器的时候,如果控制器的名称是驼峰命名法,那访问的url中要改成横线的形式。例如: public function actionRoomUpdate(){//}//访问的时候就要www.test.co...

dragon_tech
7分钟前
0
0
Navicat使用教程:使用Navicat Query Analyzer优化查询性能(第2部分)

下载Navicat Monitor最新版本 Navicat Monitor 是一套安全、简单而且无代理的远程服务器监控工具。它具有强大的功能使你的监控发挥最大效用。受监控的服务器包括 MySQL、MariaDB 和 Percona ...

电池盒
14分钟前
0
0
Python3 读写utf-8文本文件

with open('testRead.txt', 'r', encoding='utf-8') as f: for each_line in f: Passwith open('testWrite.txt', 'w', encoding='utf-8') as f: f.write('写入的内容'......

编程老陆
17分钟前
0
0
Linux syslog相关函数详解

介绍 syslog是Unix系统的日志系统。可以将日志记录在本地系统中。 一个完整的syslong日志包含如下信息:程序模块 | 严重性 | 时间 | 主机名 | 进程名 | 进程ID | 正文。 syslong相关函数 1....

RongJinhui0
21分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部