您的位置:首页 > 职场人生

黑马程序员——OC基础:类和对象

2015-05-29 00:20 471 查看
类:一类事物共同特征和行为的抽象
对象:类的具体的个体

类的定义:
1)类的声明(规定当前类的:类名、属性、行为)
@interface
类名:父类名
{
//
定义类的属性
}
//
类的行为
@end
2)类的实现(实现具体行为)
@implementation
类名
//
行为的具体实现
@end

对象的创建:
Car *p = [Car new]; //
用Car类实例化了一个实例对象,对象的名称是p
[Car new]
做了3件事情:
1)向计算机申请内存空间
2)给类中的每一个成员初始化值
3)返回新申请的空间的首地址

实例1:

实现:
类名:苹果手机(Iphone)
属性:颜色(_color),大小(_size),处理器(_cpu)
行为:查看本机信息(aboutMyPhone),打电话(call),发短信(sendMessage)
实现该类,并
1)查看本机信息
2)打电话给10086
3)给10086发短信询问联通的客服电话是多少

#import <Foundation/Foundation.h>

// 苹果手机类的声明

@interface Iphone :
NSObject

{

@public

//
属性

NSString *_color;
// 颜色

float _size; //
尺寸

NSString* _cpu;
// cpu

}

// 行为

-(void)aboutMyPhone;
// 查看本机信息

-(void)callto: (int)num;
// 打电话

-(void)sendMessageTo: (int)num ofMessage: (NSString *)message;
// 发短信

@end

// 苹果手机类的实现

@implementation Iphone

// 查看本机信息

-(void)aboutMyPhone{

NSLog(@"颜色:%@,尺寸:%.1f,cpu:%@",self->_color,
self->_size,
self->_cpu);

}

// 打电话

-(void)callto: (int)num{

printf("正在打电话给%d\n",num);

}

// 发短信

-(void)sendMessageTo: (int)num ofMessage: (NSString *)message{

NSLog(@"正在给%d发短信:%@",num,
message);

}

@end

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

@autoreleasepool {

//
创建对象并赋值

Iphone *myIphone = [Iphone
new];

myIphone ->_color =
@"gold";

myIphone ->_size =
4.7;

myIphone ->_cpu =
@"A8";

//
查看本机信息

[myIphone aboutMyPhone];

// 打电话

[myIphone callto:10086];

// 发短信

[myIphone sendMessageTo:10086
ofMessage:@"联通的客服电话是多少?"];

}

return 0;

}

/*
实例2一个人可以吃不同的食物,只要吃东西体重就会增加0.6,如果出门遛弯,每走100步,体重减0.2,小于100步忽略不计。请用面向对象思想实现。
*/

#import <Foundation/Foundation.h>

// 类的声明

#pragma mark Person类的声明

@interface Person :
NSObject

{

@public

//
成员变量

NSString *name;
// 姓名

int age; //
年龄

float weight;
// 体重

}

// 方法

-(void)eat: (NSString *)food;
// 吃东西

-(void)walk: (int)num;
// 走路

@end

// 类的实现

#pragma mark -

#pragma mark Person类的实现

@implementation Person

// 方法

-(void)eat: (NSString *)food{
// 吃东西

weight += 0.6f;
// 体重增加

NSLog(@"%@吃了%@,体重变为%.1f斤\n",
name, food,
weight);

}

-(void)walk: (int)num{
// 走路

weight -= num /
100 * 0.2;
// 体重减少

NSLog(@"%@走了%d步,体重变为%.1f斤\n",
name, num,
weight);

}

@end

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

@autoreleasepool {

// 创建对象

Person *p = [Person
new];

//
给对象的成员变量赋值

p -> name =
@"怪叔叔";

p -> age =
44;

p -> weight =
160;

// 调用方法

[p eat:@"萝莉汁"];

[p walk:345];

}

return 0;

}

/*
实例3
1.设计一个“狗”类
1)属性
狗名
颜色
速度(单位是m/s)
性别
体重(单位是kg)

2)行为
吃:每吃一次,体重增加0.5kg,输出吃完后的体重
叫:输出所有属性
跑:每跑一次,体重减少0.5kg,输出速度和跑完后的体重
比较颜色:跟别的狗比较颜色,如果一样,两个值做减法得零,返回NO(零值),不一样,做减法得到非零值,返回YES(1)
比较速度:跟别的狗比较速度,返回速度差(自己的速度 -
其他狗的速度)

2.结合前面的“狗”类,设计一个“人”类
1)属性
姓名
狗(养了一条狗)

2)行为
喂狗:每喂一次,狗就会执行“吃”这个行为
遛狗:每遛一次,狗就会执行“跑”这个行为
*/

#import <Foundation/Foundation.h>

// 狗的颜色

typedef enum{

colorWhite,

colorBlack,

colorYellow,

colorBrown

} dogColor;

//狗的性别

typedef enum{

sexMale,

sexFemale

} dogSex;

// 声明狗类

#pragma mark 狗类的声明

@interface Dog : NSObject

{

@public

//
狗的成员变量

NSString *_name;
// 狗名

dogColor _color;
// 颜色

int _speed; //
速度

dogSex _sex; //
性别

float _weight;
// 体重

}

// 狗的行为

-(void)eat; //


-(void)bark; //


-(void)run; //


-(BOOL) compareColorWithOther: (Dog *)other;
// 比较颜色

-(int) compareSpeedWithOther: (Dog *)other;
// 比较速度

@end

// 狗类的实现

#pragma mark 狗类的实现

@implementation Dog

// 吃

-(void)eat{

_weight += 0.5f;

NSLog(@"%@吃完后的体重为:%.1fkg",_name,_weight);

}

// 叫

-(void)bark{

NSLog(@"%@的颜色:%d
速度:%dm/s
性别:%d 体重:%.1fkg",_name,
_color,
_speed, _sex,
_weight);

}

// 跑

-(void)run{

_weight -= 0.5f;

NSLog(@"%@的速度:%dm/s
跑完后的体重:%.1fkg",_name,
_speed,
_weight);

}

// 比较颜色

-(BOOL) compareColorWithOther: (Dog *)other{

return _color - other->_color ==
0 ? 0 :
1;

}

// 比较速度

-(int) compareSpeedWithOther: (Dog *)other{

return _speed - other->_speed;

}

@end

// 人类的声明

#pragma mark -

#pragma mark 人类的声明

@interface Person :
NSObject

{

@public

//
人的成员变量

NSString *_name;
// 姓名

Dog *_dog; //


}

// 人类的行为

-(void)feedDog:(NSString*)foodName;
// 喂狗

-(void)walkDog:(int)distance;
// 遛狗

@end

// 人类的行为实现

#pragma mark 人类行为的实现

@implementation Person

// 喂狗

-(void)feedDog:(NSString*)foodName{

NSLog(@"%@喂%@吃了%@",
_name, _dog->_name, foodName);

[_dog eat];

}

// 遛狗

-(void)walkDog:(int)distance{

NSLog(@"%@让%@走了%d米",
_name, _dog->_name, distance);

[_dog run];

}

@end

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

@autoreleasepool {

//
创建狗1对象并赋值

Dog *dog1 = [Dog
new];

dog1 -> _name =
@"萝莉狗";

dog1 -> _color =
colorBlack;

dog1 -> _speed =
80;

dog1 -> _sex =
sexFemale;

dog1 -> _weight =
20.4f;

//
创建狗2对象并赋值

Dog *dog2 = [Dog
new];

dog2 -> _name =
@"dog2";

dog2 -> _color =
colorBrown;

dog2 -> _speed =
78;

dog2 -> _sex =
sexMale;

dog2 -> _weight =
23.4f;

// 狗1叫

[dog1 bark];

// 狗1吃

[dog1 eat];

// 狗2叫

[dog2 bark];

// 狗2跑

[dog2 run];

//
狗1和狗2比颜色

BOOL y = [dog1
compareColorWithOther:dog2];

switch (y) {

case 1:

NSLog(@"两条狗的颜色不一样");

break;

case 0:

NSLog(@"两条狗的颜色一样");

break;

default:

break;

}

//
狗2和狗1比速度

int s = [dog2
compareSpeedWithOther:dog1];

NSLog(@"两条狗的速度差为:%dm/s", s);

//
创建人对象并赋值

Person *p = [Person
new];

p -> _name =
@"怪叔叔";

p -> _dog = dog1;

// 喂狗

[p feedDog:@"便便粥"];

// 遛狗

[p walkDog:23];

}

return 0;

}

/*
实例4
设计一个“学生”类,用结构体作为类的成员属性
属性:姓名,生日
*/

#import <Foundation/Foundation.h>

typedef struct {

int year;

int month;

int day;

} Date;

@interface Student :
NSObject

{

@public

NSString * _name;
// 姓名

Date _birthday;
// 生日

}

@end

@implementation Student

@end

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

@autoreleasepool {

//
创建学生对象方法1:逐个赋值

Student *s1 = [Student
new];

s1 -> _name =
@"萝莉酱";

s1 -> _birthday.year =
2008;

s1 -> _birthday.month =
11;

s1 -> _birthday.day =
11;

//
创建学生对象方法2:通过强制转换赋值

Student *s2 = [Student
new];

s2 -> _birthday = (Date){2008,11,11};

//
创建学生对象方法3:通过变量赋值

Student *s3 = [Student
new];

Date d1 = {2003,11,11};

s3 -> _birthday = d1;

//
输出学生信息

NSLog(@"姓名:%@
生日:%d年 %d月
%d日", s1 ->_name, s1 ->_birthday.year,
s1 ->_birthday.month, s1 ->_birthday.day);

}

return 0;

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