// // main.m // 04-创建类2 // // Created by Apple on 14/11/17. // Copyright (c) 2014年 itcast. All rights reserved. // #import <Foundation/Foundation.h> /* 类名:Zombies 属性:life,颜色,位置,形状 行为:走,咬,死,loseLife 炮弹 类名:Cannonball 属性:大小,威力,飞行距离,速度 行为:飞,爆炸 车 类名:Car 属性:载员,速度,牌照 行为:跑,停 学生 类名:Student 属性:姓名、学号,性别 行为:学习,逃学 手机: 类名:Phone 属性:大小,尺寸,颜色,_cup,内存 行为:打电话,发短信 */ //在OC中没有命名空间,也不支持包名 //在OC定义类、枚举、结构体的时候需要给它们加上前缀 //Zombies //声明 typedef enum _CZColor{ CZColorWhite, CZColorBlack, CZColorYellow } CZColor; typedef struct _CZPoint{ int x; int y; } CZPoint; @interface CZZombies : NSObject { @public int _life;//生命值 CZColor _color;//颜色 CZPoint _position;//位置 } /** * 走到那个位置 * * @param position 走到位置 */ - (void) walkTo:(CZPoint) position; - (void) bite; @end @implementation CZZombies /** * 走到那个位置 * * @param position 走到位置 */ - (void) walkTo:(CZPoint) position { _position = position; NSLog(@"走到了(%d,%d)的位置",_position.x,_position.y); } - (void) bite { NSLog(@"咬"); } @end void test() { // 创建对象 // 同一个类创建出来的多个对象之间没有什么关系,成员变量都是自己拥有的,与其他的对象没有任何关系 CZZombies *zombie = [CZZombies new]; CZPoint position = {10,10}; [zombie walkTo:position]; CZZombies *zom = [CZZombies new]; NSLog(@"zom 位置(%d,%d)",zom->_position.x,zom->_position.y); } /* 手机: 类名:IPhone 属性:大小,颜色,型号 行为:aboutPhone 打电话, callTo:(char *) phoneNum 发短信 sendMessage:(NSString *) content to:(NSString *) phoneNum */ //定义一个大小的结构体 typedef struct _CZSize { double width;//宽 double height;//高 } CZSize; //为了防止与前面的冲突去掉前缀 typedef enum _Color{ ColorWhite, ColorBlack, ColorYellow } Color; //定义手机类 //声明 @interface CZIPhone : NSObject { @public CZSize _size;//尺寸 Color _color; // 颜色 NSString * _model;//型号 } /** * 关于手机 */ - (void) aboutPhone; /** * 打电话 * * @param phoneNum 手机号码 */ - (void) callTo:(NSString *) phoneNum; /** * 发送短信 * * @param content 短信内容 * @param phoneNum 手机号码 */ - (void) sendMessage:(NSString *)content to:(NSString *) phoneNum; @end @implementation CZIPhone /** * 关于手机 */ - (void) aboutPhone { NSLog(@"这一部%@ 颜色为%d,尺寸width = %.2lf,height = %.2lf",_model,_color,_size.width,_size.height); } /** * 打电话 * * @param phoneNum 手机号码 */ - (void) callTo:(NSString *) phoneNum { NSLog(@"给 %@ 打电话",phoneNum); } /** * 发送短信 * * @param content 短信内容 * @param phoneNum 手机号码 */ - (void) sendMessage:(NSString *)content to:(NSString *) phoneNum { NSLog(@"给 %@ 发送内容为 %@ 的短信",phoneNum,content); } @end int main(int argc, const char * argv[]) { // 创建对象 CZIPhone *myPhone = [CZIPhone new]; myPhone->_color = ColorWhite; myPhone->_size = (CZSize){320,480}; myPhone->_model = @"iPhone4s"; [myPhone aboutPhone]; [myPhone callTo:@"10086"]; [myPhone sendMessage:@"老婆不回家吃饭了" to:@"110"]; return 0; }
总结:
/*
1、OC简介:
OC 是C语言的超集,它在C语言的基础上增加了最小的面向对象的语法
2、对比C来学习OC
数据类型、关键字、流程控制、函数
3、面向对象的思想
1、它是一种更接近于现实生活的一种编程思想
2、它思考问题强调的谁去做
3、要完成某项任务,首先去找完成该任务对象,如果没有创建一个,然后指挥对象做事。
4、对象
在面向对象中万物皆对象
从另一角度的来说,现实生活中任何具体的事物都可以认为是一个对象
5、类
从编程的设计:现实中一类事物抽象,抽象就是提取这一类事物共有的属性和行为
从编程语言:创建对象必须要类,对象是类的实例;
6、类与对象关系
汽车图纸与汽车的关系
7、设计类
1、通过文字描述来设计一个类
名词提取法:只要遇到相关的名词都可以提取一个类
2、看图提取一个类
图上具有一些共性的事物都可以提成一个类
一个类包含三个部分:
1、类名:这一类事物的名称
2、属性:某类事物共有一些状态特征
3、行为:某类事物共有一些功能特征
8、创建类
0、设计类
1、声明:就是对的概括说明,它是给使用该的人看的
1、确定类名
2、要继承NSObject,是为了让类有创建对象的能力
3、声明必须以@interface 开头 以@end结尾
4、声明属性,必须在@interface 与@end之间的大括号中
声明属性的时候不可以对属性进行初始化
5、声明方法,必须在{} 与 @end之间进行声明,不可以有方法的实现
格式:方法类型标识符 (返回值类型) 方法名:(参数类型) 参数名称 方法名:(参数类型) 参数名称
1、所有的数据类型都要使用小括号扩起来
2、一个参数对应一个冒号
3、冒号是方法名称一部分
2、实现:实现声明所有的方法
必须写在@implementation 与@end
注意点:1、只有声明没有实现的类,链接的时候就报错
2、只有实现没有声明的类,可以使用(OC弱语法),但是编程的时候也不可以这么做
3、声明与实现不可以嵌套,一个类的内部也不可声明其他类
4、少@end
5、声明的属性没有写在大括号中
6、声明的方法写在了大括号中
7、调用类的对象方法的时候只能通过该类对象,不能像函数一样直接调用
8、函数不能直接访问某个对象的成员变量
9、函数与方法
1、函数都是平行,没有谁隶属于谁的关系
2、函数中定义变量都是局部变量,函数中能直接操作一个类的成员变量
3、函数的调用是直接通过函数名称进行调用的
对象方法:
1、它是隶属于该类的对象的,只能该该类的对象调用
2、在对象方法中可以直接访问成员变量,因为他们都是隶属于该类的对象的
10、对象的创建
Object * obj = [类名 new];
1、为类的对象在堆中开辟存储空间
2、将所有成员变量初始化为0,如果是对象类型的就初始化为nil
3、返回指向该对象的指针
*/