
屏幕快照 2017-09-18 13.26.27.png

屏幕快照 2017-09-18 14.48.02.png

屏幕快照 2017-09-18 14.49.01.png
main.m
#import <Foundation/Foundation.h>
#import "Gun.h"
int main(int argc, const char * argv[]) {
// 1.創(chuàng)建一把槍
Gun *gun = [Gun new];
// 2.設(shè)置槍的子彈數(shù)量
// gun->_bullet = 100;
// 引發(fā)這個問題的原因: 因為成員變量是public, 給成員變量賦值的時, 賦值的值不受我們的約束
// gun->_bullet = -100;
[gun addBullet:100];
// 3.射擊
[gun shoot];
// 4.查看子彈的剩余數(shù)據(jù)(獲取成員變量的值)
// NSLog(@"bullet = %i", gun->_bullet);
NSLog(@"BULLET = %i", [gun getBullet]);
return 0;
}
Gun.h
#import <Foundation/Foundation.h>
@interface Gun : NSObject
{
// @public
int _bullet; // 子彈
// 雖然成員變量不是public之后外界不能直接訪問了, 但是還是可以在本類的對象方法中直接訪問
}
/**
* 射擊方法
*/
- (void)shoot;
// 提供一個方法用于設(shè)置成員變量的值
- (void)addBullet:(int)count;
// 提供一個方法用于返回成員變量的值
- (int)getBullet;
@end
Gun.m
#import "Gun.h"
@implementation Gun
- (void)shoot
{
if (_bullet > 0) {
_bullet--;
NSLog(@"打了一槍 , 還剩%i顆子彈", _bullet);
}else{
NSLog(@"沒有子彈了");
}
}
// addBullet就是對成員變量的封裝
- (void)addBullet:(int)count // -100
{
/*
封裝: 屏蔽內(nèi)部實現(xiàn)的細(xì)節(jié), 僅僅對外提供共有的方法/接口
好處: 保證數(shù)據(jù)的安全性
將變化隔離
規(guī)范: 一般情況下不會對外直接暴露成員變量, 都會提供一些共有的方法進(jìn)行賦值
成員變量都需要封裝起來
*/
// 對傳入的數(shù)據(jù)進(jìn)行過濾
if (count < 0) {
count = 0;
}
_bullet = count;
}
- (int)getBullet
{
return _bullet;
}
@end