상속성

이승덱·2021년 7월 21일
0

CPP

목록 보기
29/70
#include <iostream>

#include<iomanip>

using namespace std;

//상속성

//객체지향(OOP Object Oriented Programing)

//class는 일종의 설계도

//상속(Inheritance)이란? 부모가 자식에게 유산을 물려주는 것과 같은 의미

//생성자와 소멸자는 어떤식으로 호출될까?

//->둘다 호출된다!

//생성자의 경우 부모->자식순으로 호출

//소멸자의 경우 자식->부모순으로 소멸

//정확히 말하자면 자식의 생성자와 소멸자에 접근하여

//선처리(생성자)혹은 후처리(소멸자) 영역에서 부모의 생성자와 소멸자를 실행하고

//자식의 생성자와 소멸자를 실행

class Player {

public:

 Player() {

 cout << "Player 생성자 호출" << endl;

 _hp=0;

 _attack=0;

 _defence=0;

 }

 Player(int hp) {

 cout << "Player(int hp) 생성자 호출" << endl;

 _hp = hp;

 _attack = 0;

 _defence = 0;

 }

 ~Player() {

 cout << "Player 소멸자 호출" << endl;

 }

 void Move() { cout << "Player Move" << endl; };

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

 void Die() { cout << "Player Die" << endl; };

public:

 int _hp;

 int _attack;

 int _defence;

};

//Knight는 Player을 상속받는다!

//재정의 시 부모의 함수가 아닌 자신이 새로 정의한 함수를 사용할 수 있다

class Knight :public Player{

public:

 Knight() {

 cout << "Knight 생성자 호출" << endl;

 }

 Knight(int stamina):Player(100) //선처리 영역에서 호출될 부모의 생성자를 지정

 {

 _stamina = stamina;

 cout << "Knight(int stamina) 생성자 호출" << endl;

 }

 ~Knight() {

 cout << "Knight 소멸자 호출" << endl;

 }

 void Move() { cout << "Knight Move" << endl; }; //재정의

 void Attack() { cout << "Knight Attak" << endl; };

 void Die() { cout << "Knight Die" << endl; };

public:

 int _stamina;

};

class Archer :public Player {

public:

 Archer() {

 cout << "Archer 생성자 호출" << endl;

 }

 ~Archer() {

 cout << "Archer 소멸자 호출" << endl;

 }

 void Move() { cout << "Archer Move" << endl; };

 void Attack() { cout << "Archer Attak" << endl; };

 void Die() { cout << "Archer Die" << endl; };

public:

 int _arrow;

};

class Mage :public Player {

public:

 Mage() {

 cout << "Mage 생성자 호출" << endl;

 }

 ~Mage() {

 cout << "Mage 소멸자 호출" << endl;

 }

 void Move() { cout << "Mage Move" << endl; };

 void Attack() { cout << "Mage Attak" << endl; };

 void Die() { cout << "Mage Die" << endl; };

public:

 int _mp;

};

int main()

{

 Knight k1(50);

 Archer a1;

 Mage m1;

 k1.Move();

 m1.Attack();

 a1.Die();

 k1.Player::Move(); //부모의 함수를 사용하고 싶을 경우

 return 0;

}
profile
공부 기록용 블로그입니다

0개의 댓글