다형성을 이용해 다양한 직업을 가진 모험가들이 각기 다른 스킬을 사용하는 프로그램을 구현합니다.
헤더 파일 생성 : Adventure, Warrior, Mage, Archer
소스 파일 생성 : Warrior, Mage, Archer, main
//Adventure.h
#pragma once
class Adventure
{
public:
Adventure() {}
virtual void useskill() = 0; // 순수가상함수 선언
};
//Warrior.h
#pragma once
#include "Adventure.h"
class Warrior : public Adventure
{
public:
Warrior() {}
void useskill() override;
};
override의 개념은 배우지 않았지만 main함수에서 Warrior가 추상클래스라고 에러 메세지가 발생하여 해결법을 찾아보다가 override라는 기능을 사용하면 해결이 된다하여 사용했음.
강의에서는 하나의 소스파일에 모든 코드를 작성하여 다른 헤더파일에서 순수 가상 함수를 불러오지 않아도 돼서 에러가 발생하지 않았지만 내가 작성한 코드는 헤더 파일에서 순수 가상 함수를 선언하고 소스 파일에서 함수 구현을 하면 괜찮을 줄 알았는데 헤더파일과 소스파일로 나누어서 발생한 에러로 추측하고 있다.
// Warrior.cpp
#include <iostream>
#include "Warrior.h"
using namespace std;
void Warrior::useskill()
{
cout << "Warrior uses Slash!";
}
Mage, Archer 각 헤더파일의 클래스, 생성자 이름과 각 소스파일의 출력되는 메세지만 수정한 후 다른 코드는 똑같이 작성했음.
//main.cpp
#include "Adventure.h"
#include "Warrior.h"
#include "Mage.h"
#include "Archer.h"
#include <iostream>
using namespace std;
void print(Adventure* adv) //adv는 Warrior, Mage, Archer가 들어올 수 있다.
{
adv->useskill(); //포인터(adv)가 가리키는 객체의 useskill 함수를 호출한다.
}
int main()
{
Warrior war;
Mage mage;
Archer arc;
int a = 0; // 사용자 입력받을 값
while (a < 4) //반복문 이용하여 1 2 3선택시 반복하여 선택가능함.
{
cout << "직업 선택 1.전사 2.법사 3.궁수" << endl;
cin >> a; // 사용자 입력
if (a == 1)
{
print(&war);
}
if (a == 2)
{
print(&mage);
}
if (a == 3)
{
print(&arc);
}
cout << endl;
}
}
결과
'숙제' 카테고리의 다른 글
C++ 1번 과제(상태창 구현하기) (2) | 2025.08.15 |
---|---|
C++ 숙제 (핸드폰 정보 출력 프로그램 구현하기) (2) | 2025.08.14 |
C++ 숙제(배터리 관리 클래스 만들기) (2) | 2025.08.13 |
C++ 숙제(포인터 변수를 활용한 변수값 변경, 레퍼런스 변수를 활용한 변수값 변경) (0) | 2025.08.13 |
본캠프 3일차 (숙제 : 텍스트 슈팅 게임) (0) | 2025.08.06 |