oC语言 复合

来源:互联网 发布:淘宝怎样买枪 编辑:程序博客网 时间:2024/04/30 15:50

复合



创建三个类:

////  Engine.h//  Tank-OC05-02////  Created by ibokan on 15/12/14.//  Copyright © 2015年 谭其伟. All rights reserved.//#import <Foundation/Foundation.h>@interface Engine : NSObject-(NSString *)description;@end

////  Engine.m//  Tank-OC05-02////  Created by ibokan on 15/12/14.//  Copyright © 2015年 谭其伟. All rights reserved.//#import "Engine.h"@implementation Engine//重写description方法,这里只是重写description的属性的访问器,并不是重写description这个类方法//-(void)SetDescription:(NSString *)description//{//    //}-(NSString *)description     //有返回值则是访问器{    return @"我是一个引擎,我在努力工作!";}@end

////  Tire.h//  Tank-OC05-02////  Created by ibokan on 15/12/14.//  Copyright © 2015年 谭其伟. All rights reserved.//#import <Foundation/Foundation.h>@interface Tire : NSObject@end

////  Tire.m//  Tank-OC05-02////  Created by ibokan on 15/12/14.//  Copyright © 2015年 谭其伟. All rights reserved.//#import "Tire.h"@implementation Tire-(NSString *)description{    return @"我是一个轮胎,我诚恳地托起了整个车身!";}

////  Car.h//  Tank-OC05-02////  Created by ibokan on 15/12/14.//  Copyright © 2015年 谭其伟. All rights reserved.//#import <Foundation/Foundation.h>#import "Tire.h"#import "Engine.h"@interface Car : NSObject{    @public    Engine *_engine;      //引擎    Tire *_tires[4];      //指针数组 (四个轮胎)数组中的每一个元素存储的都是一个地址,都指向Tire,即每个元素都是Tire的一个实例对象     } -(void)run;-(void)setEngine:(Engine *)engine;-(Engine *)engine;          //返回的是Engine的类型,所以用这个-(void)setTire:(Tire *)tire atIndex:(int)index;   //轮胎带索引的setter方法-(Tire *)tireAtIndex:(int)index;@end

////  Car.m//  Tank-OC05-02////  Created by ibokan on 15/12/14.//  Copyright © 2015年 谭其伟. All rights reserved.//#import "Car.h"@implementation Car-(void)run{    NSLog(@"%@",_engine);    for (int i = 0; i <4; i++) {//        NSLog(@"%@",_tires[i]);        NSLog(@"%@",[self tireAtIndex:i]);    }        }-(void)setEngine:(Engine *)engine{    _engine = engine;}-(Engine *)engine{    return _engine;}//根据index来做正确性校验-(void)setTire:(Tire *)tire atIndex:(int)index{    if (index < 0 || index >3 ) {        NSLog(@"设置轮胎位置不正确");    }    else    {        _tires[index] = tire;        }}-(Tire *)tireAtIndex:(int)index{    if (index <0 || index >3) {        NSLog(@"获取轮胎的位置不正确");        return nil;            }    else    {        return _tires[index];    }}@end



main.m文件:


//

//  main.m

//  Tank-OC05-02

//

//  Created by ibokan on 15/12/14.

//  Copyright © 2015谭其伟. All rights reserved.

//


#import <Foundation/Foundation.h>

#import "Engine.h"

#import "Tire.h"

#import "Car.h"



int main(int argc,const char * argv[]) {

    @autoreleasepool {

        /*

         

         复合

         OC中,就是一个类的成员变量是由其他的一些类组成,即一个类包含了好几个其他类

         

         

         */

        

        

        

        Engine *engine = [Enginenew];

        

        NSLog(@"%@",engine);   //通过NSLog输出一个对象的时候,对象会自动去调用它的description的方法,输出他们各自的描述。

        

        

        

        Tire *tire = [Tirenew];

        

        NSLog(@"%@",tire);

        

        

        Car *car = [Carnew];

//        car ->_engine = engine;

//        for (int i = 0; i <4; i++) {

//            Tire *tire = [Tire new];

//            car -> _tires[i] = tire;

//        }

//        

//        

        [car setEngine:engine];

        

        for (int i =0; i <4; i++) {

            Tire *tire = [Tirenew];

            [car setTire:tire atIndex:i];

        }

        

        

        

        

        

        [car run];

        

        

        /*

         继承是在对象之前建立“is a ”关系,但是不是任何情况下都适合使用的

         复合,则是在对象之间建立了一个“has a”的关系。如果能'X有一个 Y',即可以使用复合

         复合使用在将一些个体组合起来形成一个新的整体的情况下。

  

         */

        

        //@class关键字

        

         

    }

    return 0;

}



输出结果:

2016-01-04 19:44:43.950 Tank-OC05-02[36024:347751] 我是一个引擎,我在努力工作!2016-01-04 19:44:43.952 Tank-OC05-02[36024:347751] 我是一个轮胎,我诚恳地托起了整个车身!2016-01-04 19:44:43.952 Tank-OC05-02[36024:347751] 我是一个引擎,我在努力工作!2016-01-04 19:44:43.953 Tank-OC05-02[36024:347751] 我是一个轮胎,我诚恳地托起了整个车身!2016-01-04 19:44:43.953 Tank-OC05-02[36024:347751] 我是一个轮胎,我诚恳地托起了整个车身!2016-01-04 19:44:43.953 Tank-OC05-02[36024:347751] 我是一个轮胎,我诚恳地托起了整个车身!2016-01-04 19:44:43.954 Tank-OC05-02[36024:347751] 我是一个轮胎,我诚恳地托起了整个车身!Program ended with exit code: 0




0 0