<상속 예제 #1>
#import <Foundation/Foundation.h>
@interface ClassA : NSObject
{
int x;
}
- (void) initVar;
@end
@implementation ClassA
- (void) initVar
{
x=100;
}
@end
@interface ClassB : ClassA // ClassB는 ClassA를 상속한다.
- (void) printVar;
@end
@implementation ClassB
- (void) printVar
{
NSLog(@"x = %i", x);
}
@end
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
ClassB *b = [[ClassB alloc] init];
[b initVar];
[b printVar];
[b release];
[pool drain];
return 0;
}
<상속 확장 - 새 메서드 추가>
#import <Foundation/Foundation.h>
@interface Rectangle : NSObject
{
int width;
int height;
}
@property int width, height
- (int) area;
- (int) perimeter;
@end
#import "Rectangle.h"
@implementation Rectangle
@synthesize width, height;
-(void) setWidth : (int) w andHeight : (int) h
{
width = w;
height = h;
}
-(int) area
{
return width * height;
}
-(int) perimeter
{
return (width + height)*2;
}
@end
#import "Rectangle.h"
int main(int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Rectangle *myRect = [[Rectangle alloc] init];
[myRect setWidth : 5 andHeight : 8];
NSLog(@"Rectangle : w = %i, h = %i", myRect.width,myRect.height);
NSLog(@"Area = %i, Perimeter = %i h = %i", [myRect.area], [myRect.perimeter);
[myRect release];
[pool drain];
return 0;
}
<상속으로 확장하기>
// <XYPoint.h>
#import <Foundation/Foudation.h>
@interface XYPoint : NSObject
{
int x;
int y;
}
@property int x, y;
- (void) setX : (int) xVal andY : (int) yVal;
@end
// <XYPoint.m>
@implementation XYPoint
@synthesize x, y;
- (void) setX : (int) xVal andY : (int) yVal
{
x=xVal;
y=yVal;
}
@end
// <Rectangle.h>
@class XYPoint
@interface Rectangle : NSObject
{
int width;
int height;
XYPoint *origin;
}
@property int width, height;
- (XYPoint *) origin;
- (void) setOrigin : (XYPoint *) pt;
- (void) setWidth : (int) w andHeight : (int) h
- (int) area;
- (int) perimeter;
@end
// <Rectangle.m>
#import "Rectangle.h"
@implementation Rectangle
@synthesize width, height;
- (void) setWidth : (int) w andHeight : (int) h
{
width = w;
height = h;
}
- (void) setOrigin : (XYPoint *) pt
{
origin = pt;
// origin = [[XYPoint alloc] init];
// [origin setX : pt.x andY : pt.y];
}
- (int) area
{
return width * height;
}
- (int) perimeter
{
return (width+height)*2'
}
- (XYPoint *) origin
{
return origin;
}
@end
// <main.m>
#import "Rectangle.h"
#import "XYPoint.h"
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
Rectangle *myRect = [[Rectangle alloc] init];
XYPoint *myPoint = [[XYPoint alloc] init];
[myPoint setX : 100 andY : 200];
[myRect setWidth : 5 andHeight : 8];
myRect.origin = myPoint;
NSLog(@"Rectangle w = %i, h = %i", myRect.width, myRect.height);
NSLog(@"Origin at (%i,%i)", myRect.origin.x, myRect.origin.y);
NSLog(@"Area = %i, Perimeter = %i", [myRect area], [myRect perimeter]);
// [[myRect origin] release];
[myRect release];
[myPoint release];
[pool drain];
return 0;
}