OOP Object Oriented Programming
class Player
{
public:
int m_iHp = 100;
int m_iAttack = 100;
int m_iDefense = 100;
public:
Player()
:
m_iHp(200),
m_iAttack(20),
m_iDefense(5)
{
}
};
class Knight : public Player
{
private:
int m_iInfo = 123;
public:
};
int main()
{
Knight k1;
k1.m_iHp = 10;
k1.m_iAttack = 20;
k1.m_iDefense = 30;
return 0;
}
메모리 구조를 보면은
Player의 정수 3개 12바이트 + Knight의 정수 변수 1개 4바이트 해서
16바이트가 스택메모리에 올라간다.
이렇게
그러니까 부모의 설계도를 이어받아서 위로 쌓아 올리는 느낌이다.
위에 12바이트, 밑에 4바이트 이렇게 쌓임.
부모 클래스에 Mpve함수가 있고, 자식 클래스에서 완전똑같은 Move함수를 만들면
자식 클래스객체에서 Move호출 하면 자식의 Move 함수가 호출이 된다.
그렇다고 해서 부모 클래스의 Move함수를 영영 못쓰는 것은 아니고 어딘가에 숨겨놨기 때문에
사용을 할려면
Kngiht k1;
k1.Player::Move();
이렇게 사용이 가능하다.
부모 생성자 -> 자식 생성자
자식 소멸자 -> 부모 소멸지
이런순으로 알고있는데
이것은
생성자와 소멸자의 동작방식? 이지.
실제 호출 순서는
자식 생성자 호출 -> 바로 부모 생성자호출 -> 자식 생성자 호출 순이다.
호처리 영역에 ~Player() 가 낑겨 있다고 보면된다.
"건축물 쌓아 올리는 개념과 비슷하다"
이렇게 인자를 하나를 받는 생성자를 호출 하고싶다면 명시적으로 인자값을 넣어주어야한다.