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
- oC语言 复合
- OC语言--复合与继承
- OC语言笔记(五):OC封装和复合
- OC 复合
- OC-类的复合
- OC中的复合
- oc-复合的使用
- iOS-OC复合语句
- OC—类的复合
- OC中继承和复合
- OC基础教程3-继承+复合
- OC学习 第四章 复合
- OC中的继承与复合
- 《OC基础教程》读书笔记4-复合
- C语言复合数据类型
- oc语言
- OC 语言
- Oc继承和多态 复合
- 落叶枫桥LOGO
- 关系型数据库基础第一章
- IPC-消息队列
- jdbc Access mdb Driver
- android仿ios的时间滚动控件WheelView
- oC语言 复合
- Linux文件系统与挂载
- POJ-1952 BUY LOW, BUY LOWER(线性DP)
- ORM框架中用枚举类型enum来接收数据库中的tinyint字段
- 如何使用hadoop对海量数据进行统计并排序
- Qt中对象序列化的实现
- Masonry介绍与使用
- 简单数据查询
- dataScroller(primefaces)