黑马程序员-OC中的类

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一.设计类的三个步骤
1.类的名称
2.类的属性
3.类的行为(功能)
类与对象的关系
1.oc中的因相当于图纸,用来描述一类事物,也就是说,要想创建对象,必须先有类
2.oc利用类来创建对象,对象是类的具体存在。
3.因此,面向对象解决问题应该是先考虑需要设计哪些类,再利用类创建多少个对象。


二.合理设计一个类 类中有类
/*
 类名称 学生
 成员变量:性别,生日,体重,最喜欢的颜色,狗(

体重,毛色,吃,跑)
 方法: 吃,跑步,遛狗(让狗跑),喂狗(让狗吃)
*/
bogon:03oc whome$ touch 10oc.m
bogon:03oc whome$ open 10oc.m

#import <Foundation/Foundation.h>
//枚举
typedef enum{
    SexMan,
    SexWoman
}Sex;
//结构
typedef struct{
    int year;
    int month;
    int day;
}Date;

typedef enum {
    ColorBlack,
    ColorRed,
    ColorGreen
}Color;

@interface Dog:NSObject
{
    @public
    double weight;//体重
    Color curColor;//毛色
}
- (void)eat;
- (void)run;
@end


@implementation Dog
- (void) eat
{
    //每吃一次,体重就加1
    weight += 1;
    //weight = weight + 1
    NSLog(@"吃完这次后的体重是%f",weight);
}
- (void)run
{
    weight -= 1;
    NSLog(@"跑完这次后的体重是%f",weight);
}
@end



/*
 类名称 学生
 成员变量:性别,生日,体重,最喜欢的颜色,狗(

体重,毛色,吃,跑)
 方法:吃,跑步,遛狗(让狗跑),喂狗(让狗吃)
 */
@interface Student : NSObject
{
    @public
    Sex sex;//性别
    Date birthday;//生日
    double weight;//体重(kg)
    Color favColor;//最喜欢的颜色
    char *name;
    
    //重点:狗
    Dog *dog;
}
- (void)eat;
- (void)run;
- (void)print;

-(void)liuDog;
-(void)weiDog;
@end

@implementation Student

- (void)liuDog
{
    //让狗跑起来(调用狗的run方法)
    [dog run];
}
- (void)weiDog
{
    //让狗吃东西(调用狗的eat方法)
    [dog eat];
}
- (void)print
{
    NSLog(@"性别=%d,喜欢的颜色=%d,姓名=%s,

生日=%d-%d-

%d",sex,favColor,name,birthday.year,birthday.

month,birthday.day);
}
- (void)eat
{
    //每吃一次,体重就加1
    weight +=1;
    //weight = weight+1
    NSLog(@"学生吃完这次后的体重是%f",weight);
}
- (void)run
{
    weight -=1;
    NSLog(@"学生跑完这次后的体重是%f",weight);
}
@end

void test();
int main(){
    
    Student *s = [Student new];
    
    Dog *d = [Dog new];
    d->curColor = ColorGreen;
    d->weight = 20;
    s->dog = d;
    
    [s liuDog];
    [s weiDog];
    
    test();
    
    return 0;
}
void test()
{
    Student *s = [Student new];
    s->weight = 50;
    //性别
    s->sex = SexMan;
    //生日
    Date d = {2011,9,10};
    s->birthday = d;
    s->name = "Jack";
    /*
     s->birthday.year = 2011;
     s->birthday.month = 9;
     s->birthday.day = 10;
     */
    //喜欢的颜色
    s->favColor = ColorBlack;
    /*
     [s eat];
     [s eat];
     [s run];
     [s run];
     */
    [s print];
}

bogon:03oc whome$ cc 10oc.m -framework

Foundation
bogon:03oc whome$ ./a.out
2014-09-22 05:58:04.188 a.out[576:507] 跑完这

次后的体重是19.000000
2014-09-22 05:58:04.204 a.out[576:507] 吃完这

次后的体重是20.000000
2014-09-22 05:58:04.206 a.out[576:507] 性别=

0,喜欢的颜色=0,姓名=Jack,生日=2011-9-10
bogon:03oc whome$

设计一个计算器类 类方法传参
返回pai 3.14
返回两个数的平方
返回两个数的和

bogon:03oc whome$ touch 11oc.m
bogon:03oc whome$ open 11oc.m
#import <Foundation/Foundation.h>
/*
 类名称 计算器
 方法:
 1>返回 pai
 2>计算某个整数的平方
 3>计算两个整数的和
*/

@interface JiSuanQi : NSObject
//方法名:pi
- (double)pi;

//OC方法中,一个参数对应一个冒号
//方法名叫:pingFang:(冒号也是方法名的一部分)
-(int)pingFang:(int)num;

//- (int)sum:(int)num1 : (int)num2;
//方法名:sumWithNum1:andNum2;
- (int)sumWithNum1:(int)num1 andNum2:(int)

num2;

//- (int)sumWithNum1:(int)num1 andNum2:

(int)num2 andNum3:(int)num3;

@end

@implementation JiSuanQi
- (double)pi
{
    return 3.14;
}
- (int)pingFang:(int)num
{
    return num*num;
}
//- (int)sum:(int)num1:(int)num2
- (int)sumWithNum1:(int)num1 andNum2:(int)

num2
{
    return num1 + num2;
}
@end

int main(){
    JiSuanQi *jsq = [JiSuanQi new];
    int a = [jsq sumWithNum1:20 andNum2:5];
    //int a = [jsq sum:10 :5];
    //int a = [jsq pingFang:10];
    //double a = [jsq pi];
    NSLog(@"%i",a);
    return 0;
}

bogon:03oc whome$ cc 11oc.m -framework

Foundation
bogon:03oc whome$ ./a.out
2014-09-22 06:42:51.467 a.out[626:507] 25

设计一个类 类比较方法

/*
 类名称 车 Car
 成员变量:速度 speed
 方法: 速度比较
*/
bogon:03oc whome$ touch 12oc.m
bogon:03oc whome$ open 12oc.m

#import <Foundation/Foundation.h>
/*
 类名称 车 Car
 成员变量:速度 speed
 方法: 速度比较
 */
@interface Car : NSObject
{
    @public
    int speed;
}
//速度比较
- (int)compareSpeedWithOther:(Car *)other;
@end;

@implementation Car

- (int)compareSpeedWithOther:(Car *)other
{
    //speed
    //other->speed
    //返回当前这输车和为other这辆车的速度差距
    return speed - other->speed;
}

@end

int main(){
    //第一辆车 速度300
    Car *c1 = [Car new];
    c1->speed = 300;
    
    //第二辆车 速度250
    Car *c2 = [Car new];
    c2->speed = 250;
    int a = [c1 compareSpeedWithOther:c2];
    
    NSLog(@"a=%d",a);
    return 0;
    
}



bogon:03oc whome$ cc 12oc.m -framework

Foundation
bogon:03oc whome$ ./a.out
2014-09-22 06:56:29.188 a.out[649:507] a=50
匿名对象
[Car new]->speed = 300;
[[Car new] run];






------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值