OC-面向对象
类的设计:
1类名 类名的第一个字母必须大写
不能有下划线
多个英文字母,用驼峰标识
2属性
3行为
例子:
类名:Zoombie
属性(成员变量、实例变量):life、speed
行为(方法):walk、bite
面向对象解决问题应该是先考虑要设计那些类,再利用类创建多少个对象
1、类的声明和实现
声明:1)成员变量 2)方法声明
@interface Car : NSObject//让Car这个类具备创建对象的能力
{ //大括号声明对象属性
int wheels;
int speed;
}
方法声明;
方法声明;
- (void)walk;
@end
实现:
类的实现:
@implementation Car//实现@interface中声明的方法
- (void)walk //无分号
{
NSLog(@"%d岁、%d公斤的人走",age, weight);
}
@endweight
int main() { Person *p = [Person new];//把对象的地址赋值给了指针 p->age = 20; p->weight = 50.0; [p walk];//调用p的方法 Person *p2 = [Person new];//分配新的存储空间给新的对象 return 0; }
成员变量的直接赋值
int main() { Car *p = [Car new];//定义了一个指针变量p,p将来指向的是Car类型的对象 //[Car new]会创建出一个新对象, 并且会返回新对象本身(新对象的地址) //利用指针间接操纵对象属性 p->wheels = 4; //把4赋给了指针所指向对象的wheels属性 p->speed = 250; NSLog(@"车子有%d个轮子,时速位:%dkm/h",p->wheels, p->speed); return 0; } (@public)后面的所有实例变量\成员变量,默认会初始化 //方法(行为): 方法名、参数、返回值(声明、实现) //只要是OC对象的方法,必须以减号 - 开头 //OC方法中任何数据类型都必须用小括号()扩住 //OC方法中的小括号()扩住数据类型 - (void)run; @end //方法实现: [p2 run];//给p所指对象的wheels属性赋值
int main() { Person *p = [Person new]//第一次创建出Person 类,会将类加载进内存, p->age = 20; //指针isa指向所属的类 p->weight = 40; [p eat];//调用方法,本质:给指针变量p所指向的对象发送一条eat消息,调用对象的eat方法,跟随isa找到指向Person类的方法 [p walk]; Person *p2 = [Person new]; p2->age = 30; p2->weight = 60; [p2 eat]; [p2 walk]; } //成员变量是每个对象都有一份 //方法是共有的
int main()
{
Person *p = [Person new]; //在使用类创建对象之前,会将类加载进内存
}
//每个对象内部,默认有一个指针为isa,指向对象所对应的类
调用方法,其实是找到类对应的方法
对象与函数参数:
#import <Foundation/Foundation.h>
@interface Car : NSObject
{//成员变量 大括号
@public
int wheels;
int speed; //默认等于0
}
- (void)run; //方法声明
@end
@implementation Car //方法实现
-(void)run
{
NSLog(@"d个轮子,速度位%dkm/n的车子跑起来",wheels,speed);
}
@end
void test(int w, int s)
{
w = 20;
s = 200;
}
void test1(Car *newC) //传入指针
{
newC->wheels = 5;
}
@end
int main()
{
Car *c = [Car new];
c->wheels = 4;
c->speed = 250;
//test(c->wheels, c->speed)
test1(c);//把c传入test1,,相当于把c存储的地址ffc0给newC,,把wheels改为5
[c run]
}