c++ 클래스 상속의 조건

2019. 8. 25. 17:10PL/C++

반드시 기초 클래스와 유도 클래스간의 IS-A, HAS-A 관계가 성립이 되어야만 두 클래스는 상속 관계를 가지게 된다. A is a B가 성립이 될 때, A는 기초 클래스, B는 유도 클래스가 된다. 마찬가지로 A has a B가 성립이 될 때, A는 기초 클래스, B는 유도 클래스가 된다.

 

IS-A 관계는 일반적으로 알고 있는 상속 코드이며, HAS-A 관계는 상속이 아닌 다른 관계로 표현할 수 있다. 상속으로 묶인 두 개의 클래스는 강한 연관성을 띤다. 만일 두 클래스는 상속 관계라면 유도 클래스는 자식 클래스의 속성을 모두 가져야만 한다. 하지만 포인터 변수로 기초 클래스를 소유하지 않은 유도 클래스를 표현할 수 있다

 

#include <cstring>
#include <iostream>

using namespace std;

class Gun
{
private:
	int bullet;

public:
	Gun(int bnum) : bullet(bnum)
	{}
	void shot()
	{
		if (bullet != 0) {
			cout << "BBANG!\n";
			bullet--;
		}
		else {
			cout << "총알이 없습니다!\n";
		}
	}
};

class Police {
private:
	int handcuffs;
	Gun *pistol;

public:
	Police(int bnum, int bcuff) :
		handcuffs(bcuff)
	{
		if (bnum != 0) {
			pistol = new Gun(bnum);
		}
		else {
			pistol = NULL;
		}
	}
	void PutHandcuff()
	{
		cout << "SNAP!\n";
		handcuffs--;
	}
	void Shot()
	{
		if (pistol == NULL) {
			cout << "Hut BBANG!\n";
		}
		else {
			pistol->shot();
		}
	}
	~Police() {
		if (pistol != NULL) {
			delete pistol;
		}
	}
};

int main(void)
{
	Police pman1(5, 3);
	pman1.Shot();
	pman1.PutHandcuff();

	Police pman2(0, 3);
	pman2.Shot();
	pman2.PutHandcuff();
	return 0;
}

 

[출처] 윤성우, 열혈 C++ 프로그래밍

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

오목 시작 화면 구성하기  (0) 2019.08.30
stack, queue 클래스로 간단히 구현하기  (0) 2019.08.25
c++ 클래스 상속  (0) 2019.08.25
const 키워드 오버로딩  (0) 2019.08.24
복사 생성자 호출 시점  (0) 2019.08.24