1.Car.h文件
dom
#import <Foundation/Foundation.h>ide
//若是A類.h引入B類的.h文件,B類.h文件又引入A類的頭文件,就會致使頭文件循環引入的錯誤spa
//解決方案:對象
//之後只有兩種狀況須要在.h裏面引其餘的頭文件, 1是繼承, 2是協議繼承
//除此以外須要引頭文件,所有到.m文件中引入 .h中若是要使用該類型,使用@class關鍵字,@class的做用是告訴編譯器他是一個類型,並不會把該文件中的內容引入過來編譯器
@class Engine,Tire; //@classit
@interface Car : NSObjectio
{ //定義汽車類實例變量編譯
NSString * _brand;class
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];