본문 바로가기
!?/C++

클래스 상속과 포함.

by Where's my namespace 2012. 8. 28.

클래스에는 상속의 개념과, 포함이라는 개념이 있다.

 

우선 상속, 포함의 차이부터 살펴보자.  

 

흔히 상속 이라고 하면 부-자 의 관계다. 친자관계라고 생각하면 된다.

 

포함은 큰원 A 와 A 에 들어갈수 있을 정도로 충분히 작은원 B 가 있다고 하면,   B는 A에 포함되어있다.

 

라고 할 때 포함이라는 말을 쓴다. 

 

클래스에서도 마찬가지이다. 우선 포함 부터 살펴보자.

 

클래스 포함은 말그대로 클래스 안에 클래스가 있는 것이다.

 

예를 보자.

 

점의 좌표를 나타내는 클래스 Point 가 있다고 하자. 

그리고 사각형 도형을 나타내는 Rect 클래스가 있다.   이럴 경우.

 

class Rect {

public :

~~ 내용 ~~

protected :

Point _RightTop;

Point _leffTop;

};

과 같이 Rect 클래스에 Point 클래스가 포함되어 있다고 한다. 

 

포함을 사용하는 경우는, 조립의 개념으로 생각하면 된다.  

 

자동차를 예로들면,  엔진부분, 바퀴부분, 유리부분 등이 합쳐져서 자동차가 되는 것 처럼,

 

조립의 개념일 때, 포함을 사용하면 된다.

 

클래스 상속을 살펴보자.

 

클래스 상속은 아까전에도 말했듯 부모와 자식의 관계이다. 이를 부모클래스, 자식클래스라고 부른다.

한가지 특징은 자식클래스는 부모클래스의 모든 것을 가진다. 예를 보자.

 

//부모클래스

class Par {

public:

int P_int;

protect :

int P_int2;

};

//자식 클래스

class Ch : public Par

{

public :

int C_int;

};

 

와 같이 있다고 하자.  이 경우에서 보면 Par 은 부모클래스가 되고, Ch 는 자식 클래스가 된다.

 

위에서도 말했듯이, 자식클래스는 부모클래스의 모든 것을 가진다. 쉽게 예로 설명하면

 Ch.P_int = 10; 

이라는 문장을 써도 전혀 오류가 나지 않는다.

 

사용법은 위에도 나오듯, 자식클래스 명 옆에 " : public 부모클래스명"  을 해주면 된다.

 

꼭 public 부모클래스명 과같이 안하고 private 부모클래스명 처럼 해도되지만 일반적으로 public 를 사용한다.

 

 

여기서 다시한번 접근제어 명령어에 대해서 잠깐 살펴보면,

 

public : 모든 곳에서 접근이 가능하다.

private : 자신만 접근 가능하다.

protected : 자식클래스 멤버함수로 부터 접근만 허용한다. ( 자신은 당연히 가능함) 

 

이다. 그래서 흔히, 외부에 알리고 싶지 않는 변수가 있다면, 추후 상속을 고려해서, protected 로 사용하는 것이 좋다.

또한 상속은 ,  횟수에 제한이 없이 여러번 가능하다.  예를 들어 위의 예를 조금 고쳐서

 

//부모클래스

class Pa1 {

//내용생략

};

class Pa2 {

//내용생략

};

//자식 클래스

class Ch

:public Pa1 ,

 public Pa2

{

// 내용 생략

};

 

과 같이 상속의 경우 부모가 몇명이 생기든 상관없이 " , "  로 구분해서 써주면 된다.

'!? > C++' 카테고리의 다른 글

오버라이딩  (0) 2012.08.30
클래스 가상함수  (1) 2012.08.30
클래스 2  (0) 2012.08.19
클래스 1  (0) 2012.08.16
문자열(string)  (1) 2012.08.12
Namespace아하!?