2015-10-13 OC语言中的复合

复合,就是对象之间的组合,它不限制对象的个数,但至少有两个对象。

复合时,将要复合的对象(类实例化)的头文件导入被复合的类的头文件中,并在接口中定义复合对象的对象类型和设置方法的声明。

具体细节用实例说明;

如 现在有一个汽车,它由轮胎和引擎组成

main.m

#import <Foundation/Foundation.h>

#import "Car.h"

#import "Engine.h"

#import "Tire.h"


int main() {

   

    //实例化一个Car对象

    Car *car = [[Car alloc]init];

    

    //实例化一个Engine对象

    Engine *engine = [[Engine alloc]init];

    

    // 实例化一个Tire对象

    Tire *tire = [[Tire alloc]init];

    

    //给汽车设置发动机

    [car setEngine:engine];

    //给汽车设置轮胎

    [car setTire:tire];

    

    //汽车调用自身接口里面的方法

    [car describeCar];

        

}

Engine.h:

#import <Foundation/Foundation.h>


@interface Engine : NSObject


 //engine的方法声明

-(NSString *) describeI;


@end

Engine.m:

#import "Engine.h"


@implementation Engine


//engine 的方法的实现

-(NSString *)describeI

{

    return @"发动机";

}


@end

Tire.h

#import <Foundation/Foundation.h>


@interface Tire : NSObject


//tired的方法声明

-(NSString *) describeII;



@end

Tire.m:

#import "Tire.h"


@implementation Tire


//tire的方法实现

-(NSString *)describeII

{

   return @"轮胎";

    // 也可以返回一句话

    //return @"我是一个轮胎";

}


@end

Car.h:

#import <Foundation/Foundation.h>

// 头文件中导入enginetire

#import "Engine.h"

#import "Tire.h"


@interface Car : NSObject

{

    //Car类里面设置以类为返回类型的类属性,之前的一般是基本的几种数据类型,规则和之前设置类属性时一样。

    Engine * _engine;

    Tire * _tire;

}


// 设置引擎方法的声明

-(void) setEngine : (Engine *) engine;

-(Engine *) engine;


//设置轮胎方法的声明

-(void) setTire : (Tire *) tire;

-(Tire *) tire;


//设置汽车对象的方法声明

-(void) describeCar;

@end

Car.m:

#import "Car.h"


@implementation Car


//引擎方法的实现

-(void)setEngine:(Engine *)engine

{

    _engine = engine;

}


-(Engine *)engine

{

    return _engine;

}


//轮胎方法的实现

-(void)setTire:(Tire *)tire

{

    _tire = tire;

}


-(Tire *)tire

{

    return  _tire;

}


//汽车对象方法的实现

-(void) describeCar

{

    NSLog(@"我是一辆车,我有%@%@.",[_engine describeI],[_tire describeII]);

}

@end





你可能感兴趣的:(2015-10-13 OC语言中的复合)