#import "Figure.h" #import <Foundation/NSString.h> @implementation Figure @synthesize location; - (void)setSize:(NSSize)newsize { /* virtual */ } - (double)area { return 0.0; } /* virtual */ - (NSString *)figureName { return nil; } /* virtual */ - (NSString *)stringOfSize { return nil; } /* virtual */ - (NSString *)description { NSPoint loc = self.location; return [NSString stringWithFormat:@"%@: location=(%.2f, %.2f), %@, area=%.2f", [self figureName], loc.x, loc.y, [self stringOfSize], [self area]]; } @end // // Circle.h // Test // // Created by zhen7216 on 2017/3/12. // Copyright © 2017年 chenzhen. All rights reserved. // #import "Figure.h" @interface Circle : Figure { double radius; } @end // // Circle.m // Test // // Created by zhen7216 on 2017/3/12. // Copyright © 2017年 chenzhen. All rights reserved. // #import "Circle.h" #import <Foundation/NSString.h> #import <math.h> #define PI 3.14159 @implementation Circle - (void)setSize:(NSSize)newsize { double x = newsize.width; double y = newsize.height; radius = sqrt(x * x + y * y); } - (double)area { return radius * radius * PI; } - (NSString *)figureName { return @"Circle"; } - (NSString *)stringOfSize { return [NSString stringWithFormat:@"radius=%.2f", radius]; } @end #import "Figure.h" @interface Rectangle : Figure { NSSize size; } @end #import "Rectangle.h" #import <Foundation/NSString.h> @implementation Rectangle - (void)setSize:(NSSize)newsize { size = newsize; } - (double)area { return size.width * size.height; } - (NSString *)figureName { return (size.width == size.height) ? @"Square" : @"Rectangle"; } - (NSString *)stringOfSize { return [NSString stringWithFormat:@"size=%.2f x %.2f", size.width, size.height]; } @end #import <Foundation/NSString.h> #import "Figure.h" #import "Circle.h" #import "Rectangle.h" #import <stdio.h> BOOL testloop(void) { Figure *fig = nil; double x, y, w, h; char buf[64], com; do { printf("Shape (C=Circle, R=Rectangle. Q=Quit) ? "); if (scanf("%s", buf) == 0 || (com = buf[0]) == 'Q' || com == 'q') return NO; switch (com) { case 'C': case 'c': fig = [[Circle alloc] init]; break; case 'R': case 'r': fig = [[Rectangle alloc] init]; break; } }while (fig == nil); printf("Location ?"); scanf("%lf%lf", &x, &y); fig.location = NSMakePoint(x, y); printf("Size? "); scanf("%lf%lf", &w, &h); [fig setSize:NSMakeSize(w, h)]; printf("%s\n", [[fig description] UTF8String]); return YES; } int main(void) { BOOL flag; do { @autoreleasepool { flag = testloop(); } }while (flag); return 0; }