클래스에는 상속의 개념과, 포함이라는 개념이 있다.
우선 상속, 포함의 차이부터 살펴보자.
흔히 상속 이라고 하면 부-자 의 관계다. 친자관계라고 생각하면 된다.
포함은 큰원 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
{
// 내용 생략
};
과 같이 상속의 경우 부모가 몇명이 생기든 상관없이 " , " 로 구분해서 써주면 된다.