[C++] 가상함수를 써서 플레이어를 생성하는 함수를 호출해보자
2022. 6. 13. 20:54ㆍ코딩 1막 <C++개념편>/코딩 1막 <C++응용편>
728x90
#include <iostream>
#include <string>
using namespace std;
struct Class
{
void virtual Attack()
{
cout << "공격" << endl;
}
virtual ~Class()
{
cout << "클래스 소멸자" << endl;
}
};
struct Warrior : Class
{
void Attack()
{
cout << "근접 공격" << endl;
}
~Warrior()
{
cout << "워리어 소멸자" << endl;
}
};
struct Archer : Class
{
void Attack()
{
cout << "원거리 공격" << endl;
}
~Archer()
{
cout << "아처 소멸자" << endl;
}
};
struct Player
{
string name;
Class* playerClass; // has a 관계
void Attack()
{
cout << name << "이 공격한다" << endl;
playerClass->Attack();
}
~Player()
{
cout << "플레이어 소멸자" << endl;
delete playerClass;
}
};
// {}가 끝나도 정보가 유지되고싶어서 동적할당을 시킨것
Player* CreatePlayer()
{
int input;
Player* tempPlayer = new Player;
cout << "플레이어를 생산합니다" << endl;
cout << "플레이어 이름 입력 : " ;
cin >> tempPlayer->name;
cout << "플레이어 직업을 선택하시오 (1. 전사 2. 궁수) : " << endl;
cin >> input;
if (input == 1)
{
tempPlayer->playerClass = new Warrior();
}
else
{
tempPlayer->playerClass = new Archer();
}
return tempPlayer;
}
void main()
{
Player* player = CreatePlayer();
player->Attack();
delete player;
}
728x90
'코딩 1막 <C++개념편> > 코딩 1막 <C++응용편>' 카테고리의 다른 글
[C++] 랜덤한 확률이 조정된 강화를 하는 아이템 생성하기 (0) | 2022.06.14 |
---|---|
[C++] 생성한 문자열 공백없애는 함수 만들기 (0) | 2022.06.14 |
[C++] 구조체 만들고, 상속해보고, 오버로딩, 오버라이딩 및 가상함수 구현해보기 (0) | 2022.06.10 |
[C++] 상속 : 부모 몬스터 <--- 자식 드래곤 (0) | 2022.06.10 |
[C++] 동적할당을 써서 별찍기, 배수의 배열 그리고 배열범위 넓히기★ (0) | 2022.06.07 |