黑马程序员——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;
}
对象:类的具体的个体
类的定义:
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;
}
相关文章推荐
- 11个技巧:提升程序员工作效率
- 说的还真准:高效程序员的5种角色
- 程序员学习能力提升三要素
- 优秀程序员必备的23条好习惯
- 黑马程序员——多线程(三)
- 码农提高工作效率
- 《程序员开发心理学》阅读笔记一
- 黑马程序员——多线程(二)
- 黑马程序员----7K面试题银行业务调度系统
- 程序员讨厌没有价值的任务
- 黑马程序员----7K面试题交通灯
- 黑马程序员---自定义一个带行号的缓冲区对象
- 黑马程序员——多线程(一)
- 黑马程序员——明确 构造函数\构造代码块\静态代码块\ 的功能特点(图解)
- 黑马程序员+Java基础中的设计模式
- 黑马程序员----反射
- Google 历年笔试面试30题
- 阿里巴巴历年笔试面试70题
- Java程序员到架构师的推荐阅读书籍
- 开发日记(4)如何将Bitmap转换成Uri?