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