상속만을 얘기한다면 '코드의 재사용' 한 문장으로 얘기할 수 있다.
게임으로 예를들면 캐릭터는 기본적으로 가지는 수치로는 아래와 같이 5가지의 수치가 존재한다고 가정해보자.
-> 체력(HP), 마나(MP), 스테미너(SP), 공격력(ATK), 방어력(DEF)
상속을 사용하지 않은 경우
- 직업마다 같은 수치를 매번 생성하는 번거로움이 필요하다. 공통적으로 사용하는 변수, 함수가 많아질수록
해당 작업은 매우 비효율적인 코드 방법이된다.
상속을 사용한 경우
- 사용을 사용해서 구현한 경우 캐릭터 클래스(부모 클래스)가 하나 더 생성되었지만, 사용하지 않은 경우처럼
각 직업마다 매번 같은 멤버를 추가해 사용할 필요 없이 부모 클래스 멤버에 접근하여 자신 직업에 맞게 변경하여
사용할 수 있다. 이 처럼 코드의 재사용을 이용하면 새로운 클래스를 정의하는것이 수월해진다.
코드로 구현
class Character
{
public:
Character() :
m_iHP(0),
m_iMP(0),
m_iSP(0),
m_iAtk(0),
m_iDef(0)
{
cout << "Constructor" << endl;
}
~Character() {}
public:
int m_iHP;
int m_iMP;
int m_iSP;
int m_iAtk;
int m_iDef;
};
class Warrior : public Character
{
Warrior()
{
// 상속 받은 멤버에 접근하여 값 수정
m_iHP = 300;
m_iMP = 100;
m_iSP = 300;
m_iAtk = 50;
m_iDef = 50;
}
~Warrior() {}
};
class Wizard : public Character
{
Wizard()
{
m_iHP = 100;
m_iMP = 300;
m_iSP = 100;
m_iAtk = 100;
m_iDef = 30;
}
~Wizard() {}
};
class Archer : public Character
{
Archer()
{
m_iHP = 200;
m_iMP = 200;
m_iSP = 200;
m_iAtk = 70;
m_iDef = 40;
}
~Archer() {}
};
'C++' 카테고리의 다른 글
레퍼런스(Reference)와 포인터(Pointer) 차이 (0) | 2019.07.10 |
---|---|
다중 상속(Diamond of Death)의 문제점 (0) | 2019.07.10 |
순수 가상 함수(Pure Virtual Function) (0) | 2019.07.09 |
가상 함수 테이블(Virtual Function Table) (0) | 2019.07.09 |
객체지향이란? (0) | 2019.07.09 |