본문 바로가기

C++

상속을 사용하는 의미

상속만을 얘기한다면 '코드의 재사용' 한 문장으로 얘기할 수 있다.

 

게임으로 예를들면 캐릭터는 기본적으로 가지는 수치로는 아래와 같이 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() {}
};