OC實例之汽車啓動問題

1.Car.h文件

#import <Foundation/Foundation.h>

//如果A類.h引入B類的.h文件,B類.h文件又引入A類的頭文件,就會導致頭文件循環引入的錯誤

//解決方案:

//以後只有兩種情況需要在.h裏面引其他的頭文件, 1是繼承, 2是協議

//除此之外需要引頭文件,全部到.m文件中引入     .h中如果要使用該類型,使用@class關鍵字,@class的作用是告訴編譯器他是一個類型,並不會把該文件中的內容引入過來

@class Engine,Tire;                   //@class

@interface Car : NSObject

{           //定義汽車類實例變量

    NSString * _brand;

    NSString * _color;

    CGFloat    _price;

    Engine   * _engine;//引擎

    Tire     * _tire;//輪胎

}

汽車設置器與訪問器

- (void)setBrand:(NSString *)brand;

- (NSString *)brand;

- (void)setCplor:(NSString *)color;

- (NSString *)color;

- (void)setPrice:(CGFloat)price;

- (CGFloat)price;

//自定義初始化方法

- (id)initwithBrand:(NSString *)brand;

- (id)initwithColor:(NSString *)color;

- (id)initwithPrice:(CGFloat)price;

- (id)initwithBrand:(NSString *)brand

              color:(NSString *)color;

- (id)initwithBrand:(NSString *)brand

              price:(CGFloat)price;

- (id)initwithColor:(NSString *)color

              price:(CGFloat)price;

- (id)initwithBrand:(NSString *)brand

              color:(NSString *)color

              price:(CGFloat)price;

//汽車啓動方法

- (void)start;


- (void)setEngine:(Engine *)engine;//汽車發動機設置器與訪問器

- (Engine *)engine;


- (void)setTire:(Tire *)tire;//輪胎設置器與訪問器

- (Tire *)tire;

@end

2.Car.m文件

#import "Car.h"

#import "Engine.h"

#import "Tire.h"       //注意此處要引入頭文件

@implementation Car

- (void)setBrand:(NSString *)brand

{

    _brand = brand;

}

- (NSString *)brand

{

    return _brand;

}

- (void)setCplor:(NSString *)color

{

    _color = color;

}

- (NSString *)color

{

    return _color;

}

- (void)setPrice:(CGFloat)price

{

    _price = price;

}

- (CGFloat)price

{

    return _price;

}


- (id)initwithBrand:(NSString *)brand

{

    _brand = brand;

    return self;

}

- (id)initwithColor:(NSString *)color

{

    _color = color;

    return self;

}

- (id)initwithPrice:(CGFloat)price

{

    _price = price;

    return self;

}

- (id)initwithBrand:(NSString *)brand

              color:(NSString *)color

{

    _brand = brand;

    _color = color;

    return self;

}

- (id)initwithBrand:(NSString *)brand

              price:(CGFloat)price

{

    _brand = brand;

    _price = price;

    return self;

}


- (id)initwithColor:(NSString *)color

              price:(CGFloat)price

{

    _color = color;

    _price = price;

    return self;

}


- (id)initwithBrand:(NSString *)brand

              color:(NSString *)color

              price:(CGFloat)price

{

    _brand = brand;

    _color = color;

    _price = price;

    return self;

}

- (void)setEngine:(Engine *)engine

{

    _engine = engine;

}

- (Engine *)engine

{

    return _engine;

}

- (void)setTire:(Tire *)tire

{

    _tire = tire;

}

- (Tire *)tire

{

    return _tire;

}

- (void)start

{

    BOOL result = [_engine fire];    //調用發動機點火行爲

    //點火成功則輪胎轉動

    if (result) {                //result = 1則調用輪胎turn(轉動)行爲

        [_tire turn];

    }

    else{

        NSLog(@"請重試.....!");

    }

}

@end

3.Tire.h

#import <Foundation/Foundation.h>




@interface Tire : NSObject

{

    NSString * _brand;//品牌

    CGFloat    _size;//尺寸

}

- (void)turn;//轉動


- (void)setBrand:(NSString *)brand;

- (NSString *)brand;


- (void)setSize:(CGFloat)size;

- (CGFloat)size;


- (id)initwithBrand:(NSString *)brand

               size:(CGFloat)size;


@end

4.Tire.m

#import "Tire.h"


@implementation Tire

- (void)setBrand:(NSString *)brand

{

    _brand = brand;

}

- (NSString *)brand

{

    return _brand;

}


- (void)setSize:(CGFloat)size

{

    _size = size;

}

- (CGFloat)size

{

    return _size;

}


- (id)initwithBrand:(NSString *)brand

               size:(CGFloat)size

{

    _brand = brand;

    _size = size;

    return self;

}


- (void)turn//轉動

{

    NSLog(@"輪胎轉動");

}

@end

5.Engine.h

#import <Foundation/Foundation.h>


@interface Engine : NSObject

{

    NSString * _brand;//品牌

    CGFloat    _power;//功率

    CGFloat    _displacement;//排量

}

- (BOOL)fire;


- (void)setBrand:(NSString *)brand;

- (NSString *)brand;


- (void)setPower:(CGFloat)power;

- (CGFloat)power;


- (void)setDisplacement:(CGFloat)displacement;

- (CGFloat)displacement;


- (id)initwithBrand:(NSString *)brand

              power:(CGFloat)power

       displacement:(CGFloat)displacement;


@end

6.Engine

#import "Engine.h"

@implementation Engine

- (BOOL)fire            //返回的是一個BOOL值

{

    unsigned long n = arc4random() % 11;     //發動機行爲的實現

    if (n % 3 != 0) {

        NSLog(@"點火成功");

        return YES;

    }

    NSLog(@"點火失敗");

    return NO;

}


- (void)setBrand:(NSString *)brand

{

    _brand = brand;

}

- (NSString *)brand

{

    return _brand;

}


- (void)setPower:(CGFloat)power

{

    _power = power;

}

- (CGFloat)power

{

    return _power;

}


- (void)setDisplacement:(CGFloat)displacement

{

    _displacement = displacement;

}

- (CGFloat)displacement

{

    return _displacement;

}

- (id)initwithBrand:(NSString *)brand

              power:(CGFloat)power

       displacement:(CGFloat)displacement

{

    _brand = brand;

    _power = power;

    _displacement = displacement;

    return self;

}


@end

7.main.m

  //創建一個引擎

    Engine * engine = [[Engine alloc]initwithBrand:@"東風日產" power:130 displacement:1.8];

    

    //創建一個輪胎

    Tire * tire = [[Tire alloc]initwithBrand:@"米其林" size:100];

    

    //創建一個車對象

    Car * car = [[Car alloc]initwithBrand:@"奧迪A4" color:@"白色" price:300000];

    //給汽車引擎類型的實例變量賦值(給車裝上發動機)

    [car setEngine:engine];

    //裝上輪胎

    [car setTire:tire];

    

    [car start];



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章