文档章节

第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
08/13
0
0
OC对象,自动释放池,OC与C语言的区别

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

老人与海l
08/22
0
0
Object-C基础-01-概述

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

Corwien
2016/03/16
33
0

没有更多内容

加载失败,请刷新页面

加载更多

安秒平衡

相关介绍 电容两端的电压不能突变。 一般用在平衡条件下的开关电路中。 流经电容的电流平均值在一个开关周期内为零。 定义 安秒平衡原则:在稳态工作的开关电源中电容两端的正安秒值等于负安...

colinux
今天
2
0
Apache日志不记录访问静态文件,访问日志切割,静态元素过期时间设置

Apache配置不记录访问静态文件的日志 网站大多元素为静态文件,如图片、css、js等,这些元素可以不用记录 vhost原始配置 <VirtualHost *:80> ServerAdmin test@163.com DocumentRoo...

野雪球
今天
3
0
聊聊storm的ICommitterTridentSpout

序 本文主要研究一下storm的ICommitterTridentSpout ICommitterTridentSpout storm-core-1.2.2-sources.jar!/org/apache/storm/trident/spout/ICommitterTridentSpout.java public interface......

go4it
今天
4
0
Ubuntu常用操作

查看端口号 netstat -anp |grep 端口号 查看已使用端口情况 netstat -nultp(此处不用加端口号) netstat -anp |grep 82查看82端口的使用情况 查找被占用的端口: netstat -tln netstat -tl...

hc321
昨天
3
0
网站cdn的静态资源突然访问变的缓慢,问题排查流程

1.首先我查看了一下是否自己的网络问题,通过对比其他资源的访问速度和下载速度,确认不是 2.通过ping 和 tracert 判断cdn域名能否正常访问,(最后回想感觉这一步可以省略,因为每次最终能访...

小海bug
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部