앞선 글에서는 클래스를 main.cpp 내부에 구현해서 활용하여 예제를 해결했다. 이번에는 클래스를 헤더파일을 활용해 구성한 뒤 별도의 cpp 파일에서 함수를 구현해 main.cpp에 라이브러리 형태로 호출하는 방법을 이용해 간단한 예제를 풀어볼것이다.
Player 클래스를 선언 후 Player를 상속받는 Warrior 클래스를 제작해 main 함수에서 불러와 정보를 출력하는 예제이다.
Player.h
#ifndef Player_H_
#define Player_H_
#include<string>
using namespace std;
class Player {
public:
Player(string nickname);
virtual void attack() = 0;
void printPlayerStatus();
// getter 함수
string getJobName();
string getNickname();
int getLevel();
int getHP();
int getMP();
int getPower();
int getDefence();
int getAccuracy();
int getSpeed();
// setter 함수
void setNickname(string nickname);
void setHP(int HP);
void setMP(int MP);
void setPower(int power);
void setDefence(int defence);
void setAccuracy(int accuracy);
void setSpeed(int speed);
protected:
string job_name;
string nickname;
int level;
int HP;
int MP;
int power;
int defence;
int accuracy;
int speed;
};
#endif
Player.cpp
#include <iostream>
#include "Player.h"
Player::Player(string nickname) {
this->nickname = nickname;
HP = 50;
MP = 50;
level = 1;
power = 5;
defence = 5;
accuracy = 5;
speed = 10;
}
void Player::printPlayerStatus() {
cout << "------------------------------------" << endl;
cout << "* 현재 능력치" << endl;
cout << "닉네임: " << nickname << endl;
cout << "Lv. " << level << endl;
cout << "HP: " << HP << endl;
cout << "MP: " << MP << endl;
cout << "공격력: " << power << endl;
cout << "방어력: " << defence << endl;
cout << "정확도: " << accuracy << endl;
cout << "속도: " << speed << endl;
cout << "------------------------------------" << endl;
}
string Player::getJobName() {
return Player::job_name;
}
string Player::getNickname() {
return Player::nickname;
}
int Player::getLevel() {
return Player::level;
}
int Player::getHP() {
return Player::HP;
}
int Player::getMP() {
return Player::MP;
}
int Player::getPower() {
return Player::power;
}
int Player::getDefence() {
return Player::defence;
}
int Player::getAccuracy() {
return Player::accuracy;
}
int Player::getSpeed() {
return Player::speed;
}
void Player::setNickname(string nickname) {
Player::nickname = nickname;
}
void Player::setHP(int HP) {
Player::HP = HP;
}
void Player::setMP(int MP) {
Player::MP = MP;
}
void Player::setPower(int power) {
Player::power = power;
}
void Player::setDefence(int defence) {
Player::defence = defence;
}
void Player::setAccuracy(int accuracy) {
Player::accuracy = accuracy;
}
void Player::setSpeed(int speed) {
Player::speed = speed;
}
Warrior.h
#ifndef Warrior_H_
#define Warrior_H_
#include "Player.h"
#include <string>
class Warrior : public Player {
public:
Warrior(string nickname);
void attack() override;
};
#endif
Warrior.cpp
#include <iostream>
#include "Player.h"
#include "Warrior.h"
Warrior::Warrior(string nickname) : Player(nickname) {
job_name = "전사";
cout << "전사 전직" << endl;
HP = 100;
}
void Warrior::attack() {
std::cout << "파워 스트라이크!" << endl;
}
main.cpp
#include <iostream>
#include "Player.h"
#include "Warrior.h"
#include "Magician.h"
#include "Thief.h"
#include "Archer.h"
using namespace std;
int main() {
string jobs[] = { "전사", "마법사", "도적", "궁수" };
int job_choice = 0;
string nickname;
Player* player = nullptr;
cout << "* 닉네임을 입력해주세요: ";
cin >> nickname;
cout << "<전직 시스템>" << endl;
cout << nickname << "님, 환영합니다!" << endl;
cout << "* 원하시는 직업을 선택해주세요." << endl;
for (int i = 0; i < 4; i++) {
cout << (i + 1) << ". " << jobs[i] << endl;
}
cout << "선택: ";
cin >> job_choice;
switch (job_choice) {
case 1:
player = new Warrior(nickname);
break;
case 2:
player = new Magician(nickname);
break;
case 3:
player = new Thief(nickname);
break;
case 4:
player = new Archer(nickname);
break;
default:
cout << "잘못된 입력입니다." << endl;
return 1;
}
player->attack();
player->printPlayerStatus();
if (player != nullptr)
delete player;
return 0;
}
해당 게시글에서는 Warrior 만 보여주고있으나 같은 방법으로 Magician, Thief, Archer 등 다양한 직업 클래스를 만들어 해당 클래스에 대한 내용도 출력 할 수 있도록 만들 수 있다. 이렇게 클래스를 헤더파일과 cpp 파일로 나누어 구성해주면 main.cpp 파일을 더욱 깔끔하게 작성하고 안전하게 보호 할 수 있다.
'내배캠 TIL' 카테고리의 다른 글
| [내배캠 TIL 251216] C++ 자원 관리 2 (0) | 2025.12.17 |
|---|---|
| [내배캠 TIL 251216] C++ 자원 관리 1 (0) | 2025.12.16 |
| [내배캠 TIL 251211] C++ Class 활용한 예제 (0) | 2025.12.11 |
| [내배캠 TIL 251210] C++ 기초 문법 활용한 예제 2 (0) | 2025.12.10 |
| [내배캠 TIL 251209] C++ 기초 문법 활용한 예제 (1) | 2025.12.09 |