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);
}

运行结果

时间: 2024-10-08 02:37:30

Object-c 之 复合与存取的相关文章

Inside The C++ Object Model(三)

============================================================================3-0. 类所占的内存大小受到三个因素的影响:(1)语言本身所造成的额外负担(Virtual base classes):(2)编译器对于特殊情况所提供的优化处理(空基类优化):(3)Alignment的限制(对齐):注:Empty Virtual base class提供一个Virtual interface,没有定义任何数据,某些编译器对此提

数据成员的存取与布局

已知下面一组数据成员: class Point3d{ public: //… private: float x; static List<Point3d*> *freeList; float y; static const int chunkSize = 250; float z; } 数据成员的存取与布局 收藏 数据成员的布局 已知下面一组数据成员: class Point3d{ public: //… private: float x; static List<Point3d*>

创建和使用复合数组

一.使用Object对象创建复合数组 var person=new Object(); person.name="soul"; person.age="21"; 二.使用Array对象创建复合数组 var person=new Array(); person["name"]="soul"; person["age"]=21; 三.遍历复合数组 1.for...in //返回键 2.for each...in

Data Member 的存取

考察以下代码: Point3d origin; origin.x = 0.0; 此例中 x 的存取成本是什么? 答案则是视 x 和 Pointd 而定(别打脸, 我知道这是废话). 具体的呢? 因为 x 可能是个 static member, 也可能是个 nonstiatic member; Point3d 可能是个独立的 class, 也可能是另一个 单一的class 派生而来:甚至可能是从多重继承或虚拟继承而来(请不要小看其他人的代码中的可能性, 你都很有可能不知道 C++ 还能这么写, 有

CeF3开发者系列之外篇——IE中JS与C++交互

使用IE内核开发客户端产品,系统和前端页面之间的交互,通常给开发和维护带来很大的便利性.但操作系统和前端之间的交互却是比较复杂的.具体来说就是脚本语言和编译语言的交互.在IE内核中html和css虽然不兼容,但是IE编程接口是完全一样的,这得益于微软的COM组件的结构化设计和实现.所以与IE交互,必须得先说一下COM,COM全称组件对象模型(Component Object Model). COM的基本思想很简单,所有的组件模块都提供一个最根本的接口, IUnkown,它有三个方法,AddRef

使用OFBIZ的理由和不使用OFBIZ的理由

1 使用OFBIZ的理由 1.1 什么是OFBIZ OFBIZ是由Sourceforge维护的一个最著名的开源项目之一,提供创建基于最新J2EE/XML规范和技术标准,构建大型企业级.跨平台.跨数据库.跨应用服务器的多层.分布式电子商务类WEB应用系统的框架.OFBIZ 的Web应用框架以MVC模式搭建而成,整体采用了很多被大多数企业级应用系统公认的位于业务逻辑层和集成层(Business Tier and Integration Tier)的设计模式.许多表示层(Presentation Ti

Flink资料(4) -- 类型抽取和序列化

类型抽取和序列化 本文翻译自Type Extraction and Serialization Flink处理类型的方式比较特殊,包括它自己的类型描述,一般类型抽取和类型序列化框架.该文档描述这些概念并解释其机理. Java API和Scala API处理类型信息的方式有根本性的区别,所以本文描述的问题仅与其中一种API相关 一.Flink中对类型的处理 一般处理类型时,我们并不干涉,而是让编程语言和序列化框架来自动处理类型.与之相反的,Flink想要尽可能掌握进出用户函数的数据类型的信息. 1

IOS-KVC/KVO

KVC 简介设值的一个工具,对于指向id的对象,像其内存存取值.这有点像java的反射: 存在如下一个对象,已知其属性name,可取值: id p=[[Person alloc] init]; NSString *name=[p valueForKey:@"name"]; 假设,有一个数组,里面存在一系列的对象,我们想取出某一属性放在一个队列中,如下: Book *book1=[[Book alloc] init]; [email protected]"effctive c+

JavaWeb 后端 &lt;九&gt; 之 JDBC加强

一.大结果集的分页(重点,难点) 1.分批次查询:分页 2.基于数据库的分页:依赖的是数据库的分页语句(不同数据库是不同的) MySQL:每页显示10条. select * from XXX limit M,N; M:开始记录的索引.第一条记录的索引为0. N:一次查询几条记录. 第一页:select * from CUSTOMERS limit 0,10; 第二页:select * from CUSTOMERS limit 10,10; ...... 第n页:select * from CUS