首页 > 代码库 > Object-c 之 复合与存取

Object-c 之 复合与存取

说到复合与存取,我做完这个例子,感觉就是类的集合,也没什么东西。

主Car类:

#import "Engine.h"
#import "Tire.h"
//汽车
@interface Car : NSObject
{
    Engine *engine;
    Tire *tires[4];
}
-(Engine *)engine;
-(void)setEngine:(Engine *) newEngine;
-(Tire *)tireAtindex:(int) index;
-(void)setTile:(Tire *)tile atindex:(int) index;
-(void)print;
@end

#import "Car.h"

@implementation Car

-(id)init{
    NSLog(@"Car init");
    if(self=[super init]){
        engine=[Engine new];
        tires[0]=[Tire new];
        tires[1]=[Tire new];
        tires[2]=[Tire new];
        tires[3]=[Tire new];
        
    }
    return (self);
}

-(Engine *)engine{
    return engine;
}

-(void)setEngine:(Engine *)newEngine{
    engine=newEngine;
}

-(void)setTile:(Tire *)tile atindex:(int)index{
    if(index<0||index>3){
        NSLog(@"bad index %d in setTire:atindex",index);
        exit(1);
    }
    tires[index]=tile;
}

-(Tire *)tireAtindex:(int)index{
    if(index<0||index>3){
        NSLog(@"bad index %d in tireAtindex",index);
        exit(1);
    }
    return tires[index];
}

-(void)print{
    NSLog(@"%@",engine);
    NSLog(@"%@",tires[0]);
    NSLog(@"%@",tires[1]);
    NSLog(@"%@",tires[2]);
    NSLog(@"%@",tires[3]);
}
@end

Tire类

#import <Foundation/Foundation.h>
//轮胎
@interface Tire : NSObject

@end

#import "Tire.h"

@implementation Tire
- (NSString *)description{
    return (@"I'm a tire,I last a while!");
}
@end

Tire的子类 AllWeatherRadial.h

#import "Tire.h"

@interface AllWeatherRadial :Tire

@end

#import "AllWeatherRadial.h"

@implementation AllWeatherRadial
-(NSString *)description{
    return (@"I'm a tire for rain or shine!");
}
@end

Engine类

#import <Foundation/Foundation.h>
//引擎
@interface Engine : NSObject

@end

#import "Engine.h"

@implementation Engine
-(NSString *)description{
    return (@"I'm a engine,wuwuwu");
}
@end

Engine子类 Slant6

#import "Engine.h"

@interface Slant6 : Engine

@end

#import "Slant6.h"

@implementation Slant6
-(NSString *)description{
    return (@"I'm a slant6 veoom");
}
@end

主函数

#import"Car.h"
#import"AllWeatherRadial.h"
#import"Slant6.h"

int main(int argc, const char * argv[])
{
    Car *car=[Car new];
    Slant6 *engine=[Slant6 new];
    [car setEngine:engine];
    
    for(int i=0;i<4;i++){
        Tire *tire=[AllWeatherRadial new];
        [car setTile:tire atindex:i];
    }
    [car print];
    return (0);
}

运行结果


Object-c 之 复合与存取