5-2. 상속성

Crat3 ㅣ 2023. 5. 26. 15:27

1. 상속(Inheritance)

-> 자식에게 유산을 물려주는 것

class Player
{
public:
    // 멤버 함수
    void Move();
    void Attack();
    void Die();

public:
    // 멤버 변수
    int _hp;
    int _atk;
    int _def;

};

=> 공통적으로 가지는 속성을 부모 안에 설정하고 각 자식이 상속을 받도록 설정한다

class Knight : public Player
{
public:

public:
    int _stamina;

};

class Mage : public Player
{
public:

public:
    int _mp;

};

각 자식의 속성은 그 자식만 갖는 고유 특성을 채워넣을 수 있다.

 

2. 재정의

부모의 멤버함수를 각 자식의 클래스 안에서 수정(재정의)할 수 있다.             

class Player
{
public:
    // 멤버 함수
    void Move(){cout << "Player Move" << endl;}

public:
    // 멤버 변수 ~~
};


class Knight : public Player
{
public:
    void Move() { cout << "Knight Move" << endl;}
public: // ~~

};
int main()
{
    Knight k;

    k._hp = 100;

    k.Move();
    k.Player::Move();

    return 0;
}

위처럼 자식의 Move를 사용하거나 부모의 Move를 사용할 수 있다.

 

3. 생성자 & 소멸자

 

일반적으로  main 함수 내에서 knight 클래스를 따르는 객체 k를 만든다면

(1) 부모 생성자 호출(Player)

(2) 자식 생성자 호출(Knight)

(3) 자식 소멸자 호출(~Knight)

(4) 부모 소멸자 호출(~Player)

의 순서를 따른다.

 

(그러나, 로우레벨에서 살펴보면 자식 생성자 코드 바로 전의 선처리 영역에서 부모의 생성자를 호출한다)

 

자식이 부모의 생성자를 받을 때 여러가지 종류의 생성자를 골라서 받을 수 있다.

 

4. 일반적인 게임 내부의 클래스의 계층 구조

GameObject

- Creature

= Player, Monster, NPC

- Projectile

= Arrow, Magic

- Enviroment

 

Item

- Weapon

= Sword, bow

- Armor

= helmet, boots

- Consumable

= potion

'기초 C++ 스터디 > 객체지향' 카테고리의 다른 글

5-7. 객체지향 정리  (0) 2023.05.30
5-6. 연산자 오버로딩  (0) 2023.05.30
5-5. 초기화 리스트  (0) 2023.05.26
5-4. 다형성  (0) 2023.05.26
5-3. 은닉성  (0) 2023.05.26