zoukankan      html  css  js  c++  java
  • Objective-C学习笔记--复合

    编程中的复合就好像音乐中的作曲一样,讲多个组件组合在一起配合使用,从而得到完整的作品。创作乐曲时,作曲人可能会选择低音管声部和双皇冠声部组成交响乐的二声部。在软件开发中,程序员可能会用一个Pedal(脚踏板)对象和一个Tire(轮胎)对象组合出虚拟的独轮车。

    在Objective-C中,复合是童工包含作为实例变量的对象指针实现的。因此上述的虚拟独轮车应该拥有一个指向Pedal对象的指针和一个指向Tire对象的指针

    #import <Foundation/Foundation.h>
    
    //Pedal
    @interface Pedal : NSObject
    
    @end
    
    //tire
    @interface Tire : NSObject 
    
    @end
        
    @implementation Tire
    
    -(NSString *)description
    {
        return (@"I am a tire");
    }
    @end
    
    //engine
    @interface Engine : NSObject
    @end
    
    @implementation Engine
    
    -(NSString *) description
    {
        return (@"I am an engine");
    }
    @end
    
    //car
    //每一个car对象都会为指向engine和tires的指针分配内存。但是真正包含在car的并不是engine和tires变量,而只是内存中存在的其它对象的引用。
    //为新建的Car分配内存时,这些指针奖杯初始化为nil(零值)也就是说这辆汽车现在还没有发动机也没有轮胎,你可以将他们想像成还在流水线上组装的汽车框架。
    @interface Car : NSObject {
    
        Engine *engine;//engine和tires实力变量是复合的,因为他们是Car的实例变量。
        Tire *tires[4];
    }
    -(void) print;
    @end
    
    @implementation Car
    
    //若要超类(NSObject)可以完成所需的一次性初始化,需要调用[super init],init方法返回的值(id型数据,既泛型对象指针)描述了被初始化的对象
    //将[super init]的结果赋给self时Objective-C的标准惯例,这么做时为了防止超类在初始化过程中返回的对象不同于原先创建的对象
    
    -(id)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);
    }
    
    -(void)print
    {
        NSLog(@"%@",engine);
        NSLog(@"%@",tires[0]);
        NSLog(@"%@",tires[1]);
        NSLog(@"%@",tires[2]);
        NSLog(@"%@",tires[3]);
    }
    @end
    
    int main (int argc, const char * argv[])
    {    
        Car *car;
        car=[Car new];
        [car print];
        
        return (0);
    }
  • 相关阅读:
    Timer 实现2秒4秒连环炸
    Java中的注解
    PHP连接打印机
    php同步mysql两个数据库中表的数据
    thinkphp 两表、三表联合查询
    ereg/eregi报错处理办法
    ThinkPHP3.2判断手机端访问并设置默认访问模块的方法
    使用PHP获取时间今天 明天 昨天 时间戳的详解
    jquery获取radio和select选中值
    php开启mysqli扩展之后如何连接数据库
  • 原文地址:https://www.cnblogs.com/cc-Cheng/p/3317336.html
Copyright © 2011-2022 走看看