Shapes-Object4

来源:互联网 发布:音乐的发展历程知乎 编辑:程序博客网 时间:2024/06/06 02:25

继续修改上述代码,如下:

////  main.m//  Shapes-Object////  Created by cloud on 13-3-7.//  Copyright (c) 2013年 cloud. All rights reserved.//#import <Foundation/Foundation.h>typedef enum {    kRedColor,    kGreenColor,    kBlueColor} ShapeColor;typedef struct {    int x,y,width,height;} ShapeRect;NSString *colorName(ShapeColor color){    switch (color) {        case kRedColor:            return @"red";            break;        case kGreenColor:            return @"green";            break;        case kBlueColor:            return @"blue";            break;        default:            return @"no clue";            break;    }}@interface Shape : NSObject{    ShapeColor fillColor;    ShapeRect   bounds;}@end@implementation Shape-(void) setFillColor:(ShapeColor)c{    fillColor=c;}-(void) setBounds:(ShapeRect)b{    bounds=b;}-(void) draw{   }@end@interface Circle :Shape{}@end@implementation Circle-(void) setFillColor:(ShapeColor)c{    if (c==kRedColor) {        c=kGreenColor;    }    [super setFillColor:c];            //if (c==kRedColor) {    //    fillColor=kGreenColor;    //}    }-(void) draw{    NSLog(@"drawing a circle at(%d %d %d %d) in %@",bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillColor));}@end@interface Rectangle : Shape{}@end@implementation Rectangle-(void) draw{    NSLog(@"drawing a rectangle at(%d %d %d %d) in %@",bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillColor));}@end@interface OblateSphereoid : Shape{    }@end@implementation OblateSphereoid-(void) draw{    NSLog(@"drawing an egg at(%d %d %d %d) in %@",bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillColor));}@end@interface Triangle : Shape{}@end@implementation Triangle-(void) draw{    NSLog(@"drawing a triangle at(%d %d %d %d) in %@",bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillColor));}@endvoid drawShapes(id shapes[],int count){    int i;    for(i=0;i<count;i++)    {        id shape= shapes[i];        [shape draw];    }}int main(int argc, const char * argv[]){    //@autoreleasepool {            id shapes[4];                ShapeRect rect0={0,0,10,30};        shapes[0]=[Circle new];            [shapes[0] setBounds:rect0];        [shapes[0] setFillColor:kRedColor];                ShapeRect rect1={30,40,50,60};        shapes[1]=[Rectangle new];        [shapes[1] setBounds:rect1];        [shapes[1] setFillColor:kGreenColor];                ShapeRect rect2={15,19,37,29};        shapes[2]=[OblateSphereoid new];        [shapes[2] setBounds:rect2];        [shapes[2] setFillColor:kBlueColor];            ShapeRect rect3={47,32,80,50};        shapes[3]=[Triangle new];        [shapes[3] setBounds:rect3];        [shapes[3] setFillColor:kRedColor];            drawShapes(shapes, 4);           // }    return 0;}

运行结果如下:


这段代码展示了如何调用父类的方法,通过关键字super,子类可以调用父类的方法。circle中setFillColor现有的代码与注释的代码效果相同。只不过一个是调用父类方法实现,一个是重写方法。

原创粉丝点击