'상속'에 해당되는 글 2건

  1. 2012.07.17 Objective C 상속 예제 따라하기 두번째
  2. 2012.07.17 Objective C 상속 예제 따라하기

- 도형에 관한 상속 예제이다.

- 소스코드

#import <Foundation/Foundation.h>


@interface Rectangle : NSObject{

int width;

int height;

}

@property int width, height;

-(int)area;

-(int)perimeter;

-(void)setWidth:(int) w andHeight: (int) h;


@end 

#import "Rectangle.h"


@implementation Rectangle

@synthesize width, height;

-(int)area{

return width*height;

}

-(int)perimeter{

return (width+height)*2;

}

-(void)setWidth:(int) w andHeight: (int) h{

width = w;

height = h;

}

@end 

이제 정사각형을 다뤄 보자. Square라는 클래스를 새로 정의하고 Rectangle 클래스에서 했던 것처럼 유 사한 메서드를 정의하는 방식도 있다. 혹은, 정사각형이 직사각형에서 너비와 높이가 똑같은 특별한 도형 임을 인식해서 해결해도 된다. 

#import <Foundation/Foundation.h>

#import "Rectangle.h"


@interface Square : Rectangle

-(void) setSide: (int)s;

-(int) side;


@end 

#import "Square.h"


@implementation Square

-(void) setSide: (int)s{

[self setWidth:s andHeight:s];

}

-(int) side{

return width;

}

@end 

#import <Foundation/Foundation.h>

#import "Rectangle.h"

#import "Square.h"


int main(int argc, const char * argv[])

{

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",[myRect area], [myRect perimeter]);

    return 0;

Square *mySquare = [[Square alloc]init];

[mySquare setSide:5];

NSLog(@"Square : s = %i", [mySquare side]);

NSLog(@"Area = %i, Perimeter = %i",[mySquare area], [mySquare perimeter]);

return 0;

} 


- 실행화면




신고
Posted by Namseungil

상속

모든 것은 루트에서 시작된다.

지금까지 정의한 클래스는 모두 NSObject라는 루트 클래스의 자식들이다. 이를 인터페이스 파일에서 다음 과 같이 지시해 주었다.

@interface Fraction:NSObject ...

@end
Fraction 클래스는 NSObject 클래스에서 파생되었다. 계층도를 보면 NSObject가 최상위에 있기 때문에 (즉, 그 위로 아무 클래스도 없기 때문에) ‘루트’ 클래스라고 부른다. Fraction 클래스는 ‘자식 클래스’ 혹 은 ‘서브클래스’라고 부른다.

- 소스코드

#import <Foundation/Foundation.h>


@interface ClassA : NSObject

{

int x;

}

-(void) initVar;


@end 

#import "ClassA.h"


@implementation ClassA

-(void) initVar{

x = 100;

}

@end

 

#import <Foundation/Foundation.h>

#import "ClassA.h"

@interface ClassB : ClassA

-(void) printVar;


@end 

#import "ClassB.h"


@implementation ClassB

-(void) printVar{

NSLog(@"x = %i",x);

}

@end 

#import <Foundation/Foundation.h>

#import "ClassB.h"

int main(int argc, const char * argv[])

{


ClassB *b = [[ClassB alloc]init];

[b initVar];

[b printVar];

    return 0;

} 


- 실행 화면


신고
Posted by Namseungil

티스토리 툴바