您的位置:首页 > 编程语言

OC学习笔记八 类2(代码部分)

2014-09-26 00:00 239 查看
摘要: 用代码说明创建类的完整部分,类的声明 类的实现

一.类的申明

//定义一个枚举值
enum Color
{
black,
white
};
typedef enum Color IColor;

//声明类 用@inteface
@interface Cat:NSObject //NSObject 是根类,有一些基本方法,比如创建对象的方法
{
//定义属性
/*
注意:
1.属性一般用“_”开头
2.必须定义在大括号中
3.注意变量的作用域
*/
@public
int _age;
IColor _color;
}

//定义行为必须写在@interface 和@end 之间,并且不能写在大括号之内
/*
声明函数步骤
OC方法分为 类方法(+) 和 对象方法(-)

1.定义函数结构
2.是否有参数
3.是否有返回值

注意
1.声明类的行为必须在@interface 和@end 之间,并且不能写在大括号中
2.oc 方法中所有的数据类型都需要用括号括起来
3.如果没有形参用";"结束不用括号,应为 括号用于数据类型
4.如果是类方法用 + ,对象方(需要用实例来调用)法用 -
5.方法名命名规则 驼峰命名法
6.OC 方法中,每个参数对应一个冒号
7.冒号也是方法名的一部分
8.多个惨可以在冒号前加上标签,说明参数的作用,“说明”也是方法的一部分
*/

//无参数 无返回值
-(void) walk;

//无参数 有返回值
-(int) getAge;

//有参数 有返回值
-(int) eat:(char *) food;

//多个参数 主要空格
-(void) eatFood:(char *) food andDrink:(char *) water;
@end//声明结束


二.类的实现

/*
@implementation 表示实现一个类
@end 表示类实现结束
@implementation 只有一个作用,就是实现@interface中声明的方法
*/

@implementation Cat
/*
实现方法
1.@implementation要显示 @interface 中声明的方法,名称一样,只需要在后面加上大括号
2.在括号中实现功能
*/

//无参数 无返回值
-(int) walk
{
NSLog(@"cat walk");
}

//无参数 有返回值
-(int) getAge;
{
//在OC对象中,直接通过名字访问成员变量
return _age;
}

//有参数 无返回值
-(char *) eat:(char *) food
{
NSLog(@"%s",food);
return "ok";
}

//多个参数
-(void) eatFood:(char *) food andDrink:(char *) water
{
NSLog("Food:%s Water:%s",food ,water);
}

@end


三 访问部分

int main(int argc, const char * argv[])
{

//创建对象
/*
说明:
1.要创建对象,需要类继承NSObject类
2.要访问实例变量,需要把变量声明为@public 类型

创建对象前,首先在堆中创建类对象(存储对象方法 )
实例化对象 [Obj new]  [Cat new]时会做三件事:
1.在堆中开辟新的存储空间(有别于类对象的空间,是堆中的空间,new 一个 则开辟一个)
2.初始化成员变量(成员变量 在堆 中),给成员变量赋默认值,lsa(指针 指向 对象)
3.返回地址 指向堆地址的指针

Cat *cat 用于接收返回地址的指针,是个局部变量
局部变量会再栈中开辟空间,保存指向堆中指针

*/

Cat *cat = [Cat new];

//访问属性 和C中指针访问方式一样
cat->_age=4;
cat->_color=white;
int age = cat->_age;
NSLog("age=%d",age);

//调用方法 用 "[]"
/*
调用方法 调用方法在oc 中有称为发送消息

1.cat对象(栈中)在堆中找到las指针
2.las指针 找对 对应 类对象的方法
3.如果方法中有成员变量(类对象中不保持成员变量),方法会根据调用指针定位对应的对象的成员变量(堆中)
*/

//无参数 无返回值
[cat  walk];

//无参数 有返回值
int age = [cat getAge];
NSLog(@"%d",age);

//有参数 无返回值
[cat eat:"mouse"];

//多个参数
[cat eatFood:"mouse" andDrink:"农夫山泉"];

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: