개요

상속은 객체지향 프로그래밍에서 정말 중요한 개념이다.

상속이란 이미 존재하는 클래스로부터 멤버들을 물려받는 것을 의미한다.

상속을 정의하는 것은 다음과 같다.

class 자식 클래스 : 접근 지정자 부모 클레스
{
	...   // 추가된 멤버
}

class Sub : public Sup1, public Sup2
{
	....// 추가할 멤버
  ....// 재정의된 멤버
}

상속받을 클래스 이름을 작성하고, 상속할 클래스를 작성한 후, 새로 추가할 멤버를 작성한다. 기존 상속한 클래스의 멤버 또한 재정의한다.

다음은 상속에 대한 예제코드이다.

class Car //부모 클래스 : 상속할 클래스
{
int speed;

public : 
		void setSpeed(int s) { speed = s;}
		int getSpeed() { return speed;}
};

class SportsCar : public Car //자식 클래스 : 상속받은 클래스
{
		bool turbo;

public:
		void setTurbo(bool newValue) { turbo = newValue; }
		bool getTurbo() { return turbo; }
}

int main()
{
		SportsCar c;

		c.setSpeed(60); // 부모 클래스 함수 호출
		c.setTurbo(true); // 자식 클래스 함수 호출
		c.setSpeed(100);
		c.setTurbo(false);
		return 0;
}

여기서 기억할 것은 자식이 부모에 대한 확장판인 것이다.

자식 클래스는 부모의 성질을 가진 채 자식 클래스만의 특성이 추가된 것이다.

또한 자식 클래스의 자식 클래스, 즉 비유하자면 손자 클래스도 생성가능하다.

상속을 구현하려고 할 떄, 상속하려는 클래스의 관계를 살펴보아야 한다.

예를 들어 상속은 is - a 관계로, ‘컴퓨터는 기계이다.”, “아이폰은 핸드폰이다”처음 둘의 관계가 is로 정의될 수 있어야 한다.

반면에 has -a 같은 관계(포함)은 상속으로 모델링을 하면 안된다.

“현오는 강아지를 가지고 있다” 처럼 이러한 관계를 모델링에 있어서 제외하는 것이 맞다.