c++ 클래스 상속의 조건
2019. 8. 25. 17:10ㆍPL/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 |