Introduce
객체 지향 프로그래밍의 주요 특성 중 하나인 상속성에 대한 개념을 이해한다.
클래스 리뷰
#include <iostream>
using namespace std;
class Player{
public:
Player(){
_hp = 0;
_attack = 0;
_defence = 0;
cout << "Player() Constructor" << endl;
}
Player(int hp){
_hp = hp;
_attack = 0;
_defence = 0;
cout << "Player(int hp) Constructor" << endl;
}
~Player(){
cout << "Player destrucotor" << endl;
}
void Move(){cout << "Player Move Recall"<<endl;}
void Attack(){cout << "Player Attack Recall"<<endl;}
void Die(){cout << "Player Die Recall"<<endl;}
public:
int _hp;
int _attack;
int _defence;
};
저번 시간에서 클래스에 대해 살펴보았습니다. 위의 Player 클래스에는 hp, attack, defence 변수가 있고, Attack, Move, Die 함수가 존재합니다. 체력과 공격, 방어는 RPG게임에서 필수적인 요소입니다. 우리가 게임을 할때를 생각해봅시다. 캐릭터를 만들때 직업도 선택합니다. 예를들어 기사(Knight), 마법사(Mage)등 여러 직업들이 존재할 것입니다. 이것들을 모두 class로 만든다고 했을때 앞에서말한 체력,공격,방어는 여러 직업에서의 공통사항일 것입니다. 하지만 일일히 설계도(클래스)를 만들기에는 직업이 100가지가 넘는 요즘 게임에서는 매우 힘든일입니다. 여기서 공통적인 부분을 다 같이 상속을 받는 상속성의 진가가 발휘됩니다.
상속
class Knight : public Player
{
public:
// 상속받은 class의 생성자는 부모 class의 기본 생성자까지 같이 불러온다.
Knight()
{
cout << "Knight() constroer" << endl;
}
Knight(int hp)
{
cout << "Knight(hp) constroer" << endl;
}
~Knight()
{
cout << "Knight destrucotr" << endl;
}
};
위와 같이 상속받을 수 있습니다. 규칙은 다음과 같습니다.
class [상속받을 클래스명] : [접근지정자] [상속할 클래스명]
예에서는 상속할 클래스명을 Player라 했고, Player를 상속받을 클래스명을 Knight라 했습니다. 상식적으로 Knight, Mage등 각기다른 직업들이지만 이들 모두 Player라는 공통됨을 가지고 있습니다.
int main()
{
Knight k(100);
k._hp = 100;
k._attack = 20;
k._defence = 10;
k.Attack();
k.Move();
return 0;
}
========= 실행결과 ==========
Player() Constructor
Knight(hp) constroer
Player Attack Recall
Player Move Recall
Knight destrucotr
Player destrucotor
Player를 상속받은 Knight를 불러올때 생성자와 소멸자가 어떻게 반응하는지 알아봅시다.
1. Knight 객체 k를 hp=100을 받아 생성합니다. 이때 부모클래스의 기본 생성자와 객체에 맞는 생성자를 2번 호출합니다.
2. 멤버 변수와 멤버 함수를 실행합니다.
3. 프로그램이 끝날때 자식 클래스의 소멸자가 먼저 실행된 후, 부모 클래스이 소멸자가 실행됩니다.
'Language > C++' 카테고리의 다른 글
[C++] OOP(객체지향)의 특성 - 다형성(polymorphism) (0) | 2022.06.06 |
---|---|
[C++] OOP(객체지향)의 특성 - 캡슐화(encapsulation) (0) | 2022.06.06 |
[C++] OOP(객체지향)의 개념 (0) | 2022.06.06 |
[C++] 참조 (0) | 2022.06.05 |
[C++] 포인터 실습 (0) | 2022.06.05 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!