说到复合与存取,我做完这个例子,感觉就是类的集合,也没什么东西。
主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);
}
运行结果