黑马程序员-IOS-OC基础-面向对象语法二
来源:互联网 发布:知乎 广场舞大妈 编辑:程序博客网 时间:2024/05/01 16:36
-------------------------------------- android培训、java培训、ios培训期待与您交流! ---------------------------------
类的合理设计
/* 学生: 成员变量:性别、生日、体重、最喜欢的颜色、狗(体重、毛色、吃、跑) 方法:吃、跑、遛狗(让狗跑)、喂狗(让狗吃) */#import <Foundation/Foundation.h>typedef enum{ SexMan, SexWoman}Sex;typedef struct { int year; int month; int day;}Date;typedef enum{ ColorRed, ColorBlack} Color;typedef enum{ DogColorRed, DogColorWhite} DogColor;//狗@interface Dog : NSObject{@public int weight; DogColor skincolor; }-(void)eat;-(void)run;@end@implementation Dog-(void)eat{ NSLog(@"吃骨头");}-(void)run{ NSLog(@"追兔子");}@end//学生@interface Student : NSObject{ @public Sex sex; Date birthday; double weight; Color favirate; Dog *mydog;}-(void)eat;-(void)run;-(void)liugou;-(void)feedog;@end@implementation Student-(void)eat{ NSLog(@"吃东西");}-(void)run{ NSLog(@"在跑");}-(void)liugou{ [mydog run];}-(void)feedog{ [mydog eat];}@endint main(){ Student *s = [Student new]; Dog *g = [Dog new]; s->mydog = g;//把[Dog new]指针赋值给s指向的指针mydog s->sex = SexMan; Date d = {1999,8,9}; s->birthday = d; s->weight = 60; s->favirate = ColorBlack; [s liugou]; [s feedog]; [s run]; g->weight = 30; g->skincolor = DogColorRed; //[g run]; //[g eat]; return 0;}
set方法和get方法
1. set方法和get方法的使用场合
@public的成员可以被随意赋值,应该使用set方法和get方法来管理成员的访问(类似机场的安检、水龙头过滤,过滤掉不合理的东西),比如僵尸的生命值不能为负数
2. set方法
1) 作用:用来设置成员变量,可以在方法里面过滤掉一些不合理的值
2) 命名规范:
Ø 方法都是以set开头,而且后面跟上成员变量名,成员变量名的首字母必须大写
Ø 形参名称不要跟成员变量同名
3. get方法
1) 作用:返回对象内部的成员变量
2) 命名规范:get方法的名称一般就跟成员变量同名
4. 成员变量的命名规范
Ø 成员变量都以下划线 _开头
Ø 可以跟get方法的名称区分开
Ø 可以跟其他局部变量区分开,一看到下划线开头的变量,肯定是成员变量
#import <Foundation/Foundation.h>// 声明@interface Car : NSObject{ int _wheels; // 轮子个数}/*set方法*/- (void) setWheels:(int)wheels;/*get方法*/- (int) wheels;@end@implementation Car// set方法的实现- (void) setWheels:(int)wheels{ // 对外面传进来的轮子数进行过滤 if (wheels<=0) { wheels = 1; } _wheels = wheels;}// get方法的实现- (int) wheels{ return _wheels;}@end
面向对象的三大特性
面向对象的三大特性:封装、继承、多态
1,封装
<1>封装的好处:
1,过滤不合理的值。2,屏蔽内部的赋值过程。3,让外界不必关注内部的细节。
//封装 #import <Foundation/Foundation.h> @interface Student : NSObject { /* 成员变量得到命名规范:一定要以下划线 _开头 作用是: 1,让成员变量和get方法的名称区分开; 2,可以跟局部变量区分开, */ //@public //成员变量尽量不要用@public int _age; } /*set方法 1,作用:提供一个方法给外界设置成员变量值 2.命名规范: 1>,方法名必须以set开头 2>,set后面跟上成员变量的名称,成员变量的字母必须大写(setAge) 3>,返回值一定是void 4>,一定要接收一个参数,而且参数类型跟成员变量类型一致 5>,形参的名称不能跟成员变量名一样 */ //声明set方法 - (void)setAge:(int)age; /* get方法 1,作用:返回对象内部的成员变量。 2,命名规范: 1>,肯定有返回值,返回值类型与成员变量类型一致 2>,方法名跟成员变量名一致 3>,不需要接收任何参数 */ //声明get方法 - (int)age; //声明study方法 - (void)study; @end @implementation Student //实现set方法 - (void)setAge:(int)age { //对传进来的参数进过滤 if (age <= 0) { age = 1; } _age = age; } //实现get方法 - (int)age { return _age; } //实现study方法 - (void)study { NSLog(@"%d岁的学生在学习",_age); } @end int main() { //创建Student类对象 Student *s = [Student new]; //s ->_age = 10; //成员变量加@public才可以这样做,但是尽量不要这样。 [s setAge:25]; [s study]; NSLog(@"学生的年龄%d",[s age]); return 0; }
类方法
1. 基本概念
直接可以用类名来执行的方法(类本身会在内存中占据存储空间,里面有类\对象方法列表)
2. 类方法和对象方法对比
1) 对象方法
Ø 以减号-开头
Ø 只能让对象调用,没有对象,这个方法根本不可能被执行
Ø 对象方法能访问实例变量(成员变量)
2) 类方法
Ø 以加号+开头
Ø 只能用类名调用,对象不能调用
Ø 类方法中不能访问实例变量(成员变量)
Ø 使用场合:当不需要访问成员变量的时候,尽量用类方法
3) 类方法和对象方法可以同名
#import <Foundation/Foundation.h>/* 对象方法 1> 减号 - 开头 2> 只能由对象来调用 3> 对象方法中能访问当前对象的成员变量(实例变量) 类方法 1> 加号 + 开头 2> 只能由类(名)来调用 3> 类方法中不能访问成员变量(实例变量) 类方法的好处和使用场合 1> 不依赖于对象,执行效率高 2> 能用类方法,尽量用类方法 3> 场合:当方法内部不需要使用到成员变量时,就可以改为类方法 可以允许类方法和对象方法同名 */@interface Person : NSObject{ int age;}// 类方法都是以+开头+ (void)printClassName;- (void)test;+ (void)test;@end@implementation Person+ (void)printClassName{ // error:instance variable 'age' accessed in class method // 实例变量age不能在类方法中访问 //NSLog(@"这个类叫做Person-%d", age);}- (void)test{ NSLog(@"111-%d", age); //[Person test];}+ (void)test{ // 会引发死循环 //[Person test]; NSLog(@"333"); // 会引发死循环// /[Person test];}@endint main(){ //[Person printClassName]; [Person test]; //Person *p = [Person new]; //[p test]; /* -[Person printClassName]: unrecognized selector sent to instance 0x7fa520c0b370 */ // 系统会认为现在调用的printClassName是个对象方法 //[p printClassName]; return 0;}
小练习:
/* 设计一个计算器类 * 求和 * 求平均值 */#import <Foundation/Foundation.h>// 工具类:基本没有任何成员变量,里面的方法基本都是类方法@interface JiSusnQi : NSObject+ (int)sumOfNum1:(int)num1 andNum2:(int)num2;+ (int)averageOfNum1:(int)num1 andNum2:(int)num2;@end@implementation JiSusnQi+ (int)sumOfNum1:(int)num1 andNum2:(int)num2{ return num1 + num2;}+ (int)averageOfNum1:(int)num1 andNum2:(int)num2{ int sum = [JiSusnQi sumOfNum1:num1 andNum2:num2]; return sum / 2;}@endint main(){ int a = [JiSusnQi averageOfNum1:10 andNum2:12]; NSLog(@"a=%d", a); // JiSusnQi *jsq = [JiSusnQi new];// // // [jsq sumOfNum1:10 andNum2:13]; return 0;}
-------------------------------------- android培训、java培训、ios培训期待与您交流! ---------------------------------
0 0
- 黑马程序员-IOS-OC基础-面向对象语法二
- 黑马程序员-IOS-OC基础-面向对象语法二
- 黑马程序员-OC语言基础:面向对象语法 二
- 黑马程序员-IOS-OC基础-面向对象语法一
- 黑马程序员-IOS-OC基础-面向对象语法
- 黑马程序员-IOS-OC基础-面向对象语法三
- 黑马程序员——OC基础---面向对象语法
- 黑马程序员-OC语言基础:面向对象语法 一
- 黑马程序员-OC语言基础:面向对象语法 三
- 黑马程序员-OC语言基础:面向对象语法 四
- 黑马程序员——IOS基础(OC面向对象编程二)
- 黑马程序员 OC基础: 面向对象_封装(二)
- 黑马程序员--oc:面向对象语法
- 黑马程序员一OC面向对象语法
- 黑马程序员--ios基础--oc--面向对象--核心语法
- 黑马程序员 OC基础: 面向对象(一)
- 黑马程序员IOS-OC语言-面向对象
- 黑马程序员-IOS基础之OC语法
- xcode6布局去除屏幕两边空白方法
- 文件和目录
- 重启weblogic
- 为VirtualBoX下的linux系统安装VBoxLinuxAdditions增强功能
- UI进阶第六发:ios应用数据存储方式(XML属性列表-plist)
- 黑马程序员-IOS-OC基础-面向对象语法二
- Ant安装、配置和使用
- 解决ORA-01843:无效的月份的方法
- UI进阶第六发:ios应用数据存储方式(偏好设置)
- UI进阶第六发:ios应用数据存储方式(归档)
- 【web++_第四阶_Ui_导航、照片轮播_1】
- MyBatis直接执行SQL查询及批量插入数据
- 纪念自己编写的第一个java小游戏,飞翔小鸟
- 基于H.264的远程视频监控