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 |