类:一类事物共同特征和行为的抽象
对象:类的具体的个体
类的定义:
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;
}