1. 개론
상속이 나온 이유 :
class Knight 와 class Mage 를 보면 멤버변수가 공통될 경우 구조체문법으로 묶어주면 좋다.
그러나 멤버함수까지는 구조체문법으로 묶을 수가 없기 때문에 "상속"개념이 착안됬다. 라고 생각해주면 됨.
그래서 보면 구조체 처럼 부모Class를 선언해서 공통된 멤버변수 + 멤버함수를 선언한 후,
부모Class를 각각의 자식class_1 과 자식class_2 에서 "상속"해서 그대로 사용 하거나 재정의 해서 사용한다.
부모Class = 자식Class O --> 개념적으로도 맞고, 포괄한다.
자식Class = 부모Class X --> size가 자식 Class 쪽이 크거나 같으므로
- 이유
- - 개념적으로) 모든 Knight는 User다 O ( User = Knight ) , 모든 User는 Knight다 X ( Knight = User )
- - 문법적으로) data의 크기는 User <= Knight 임. 그래서 ( User = Knight )는 Knight 만 가진정보를 버리면 되지만,
( Knight = User )는 Knight 만 가진 data가 채워지지 않아서 문법오류이다.
라고 Compiler가 판단함.
코드
#include<iostream>
using namespace std;
//오늘의 주제 : 상속성
//객체지향 (OOP)
//상속성
//은닉성
//다형성
// 이런식으로 상속 과정을 거쳐서 사용 한다.
// GameObject 안에 Creature 가 있고 Creature안에 player,npc등등이 있는 것처럼
//
// GameObject
// -- creature
// ---- Player, Monster , Npc , Pet
// -- projectile
// ---- Arrow , Fireball
// -- Env (환경)
//
// Item
// -- Weapon
// ---- Sword , Bow
// -- Armor
// ---- Helmet, Boots, Armor
// -- consumarble
// ---- Potion, Scroll
class GameObject
{
public:
int _objectid;
};
class Player : public GameObject
{
public:
void Move() { cout << " Player Move호출" << endl; }
void Attack() { { cout << " Player Attack호출" << endl; } }
void Die() {}
public:
int _hp;
int _attack;
int _defence;
};
//class는 일종의 설계도
//[ [ Player ] ]
//[ Knight ]
class Knight : public Player
{
public:
void Attack() { { cout << " Knight Attack호출_재정의" << endl; } }
public:
int _Knight_stamina;
};
class Mage : public Player
{
public:
public:
int _mp;
};
int main()
{
Knight k;
k._hp = 5;
k._attack = 10;
k._defence = 20;
k._Knight_stamina = 40;
k.Move();
k.Attack();
k.Player::Attack();
return 0;
}
2. 상속될때 메모리 형태( Knight k )
Knight k 의 주소 "&k"를 보면 멤버변수에 대한 값이 순서대로 들어가 있다.
3. 선처리 영역( 부모Class의 생성자가 먼저 호출되는 이유 ) - 어셈블리어로 확인
자식Class의 생성자 호출 전 "선처리 영역"에서 부모Class를 호출하는 부분이 생략되어 있다. ( 소멸자도 역순으로 같다 )
자식Class 선처리 -> 부모Class 생성자 -> 자식Class 생성자
자식Class 소멸자 -> 자식Class 선처리? -> 부모Class 소멸자
디스어셈블리로 디버깅해서 보면 확인 가능
4. 상속성의 활용 예시
// 이런식으로 상속 과정을 거쳐서 사용 한다.
// GameObject 안에 Creature 가 있고 Creature안에 player,npc등등이 있는 것처럼
// GameObject
// -- creature
// ---- Player, Monster , Npc , Pet
// -- projectile
// ---- Arrow , Fireball
// -- Env (환경)
//
// Item
// -- Weapon
// ---- Sword , Bow
// -- Armor
// ---- Helmet, Boots, Armor
// -- consumarble
// ---- Potion, Scroll
'C++,python (인프런+사이트) > C++ 객체지향 여행' 카테고리의 다른 글
다형성 (0) | 2022.01.27 |
---|
댓글