프로그래밍/c++

객체지향의 3대속성 - 상속성

오늘의논리 2023. 2. 22. 04:30
728x90

class Player

{

public:

//멤버 함수

void Move() { cout << "Plaer Move 호출" <<endl; }

void Attack() { cout << "Player Attack 호출" << endl; }

void Die()

{

cout << "Die" << endl;

}

 

public:

//멤버 변수

StatInfo _statInfo;

};

 

class Knight : public Player

{

 

public:

 

};

 

class Mage : public Player

{

public:

};

 

이런식으로 나이트와 메이지에 플레이어의 멤버변수, 멤버 함수들을 사용 있음

 

하지만 무조건 플레이어에만 있는것을 사용하는건 아님

 

class Knight : public Player

{

 

public:

 

public:

int _stamina;

 

 

};

이런식으로 기사 만의 변수를 사용할 있음

하지만 나이트 안에 플레이어와 같은이름의 함수,변수등을 사용할 경우 나이트 안에있는것이 사용됨. 그래도 플레이어의 것이 사용하고싶다고 한다면(Move)함수

 

 

메인함수에서 사용법.

 

int main()

{        

Knight k;

 

k._statInfo.hp = 100;

k._statInfo.attack = 10;

k._statInfo.defence = 5;

 

k._stamina = 50;

 

 

 

k.Attack();

k.Move();

k.Player::Move();

k.Die();

 

return 0;

}

 

 

그렇다면 나이트를 호출했을때 플레이어의 생성자를 호출하는가?

아니다 둘다 호출한다!

 순서는

플레이어 생성자- 나이트 생성자 - 나이트 소멸자 - 플레이어 소멸자

 

하위 클래스에서는 상위클래스 생성자중 선택해서 사용할 있음

 

Knight(int stamina) : Playr(100)//플레이어 클래스중에 매개변수 1개가 있는 생성자 선택

 

//메모리

//[[Player]]

//[ Knight ] 이런식으로 위에것을 기반으로 추가적 설계가 가능하다고 보면 됨.

 

728x90