참조자와 가상함수 관계
조회수 275회
#include<iostream>
#include<ctime>
#include<cstdlib>
using namespace std;
class Player
{
public:
virtual int getGuess()
{
return 0;
}
virtual void setmin(int a)
{
}
virtual void setMax(int a)
{
}
};
class Human : public Player
{
public:
virtual int getGuess();
};
class Computer : public Player
{
private:
int min = 0;
int max = 100;
public:
virtual int getGuess();
void setmin(int a)
{
min = a;
}
void setMax(int a)
{
max = a;
}
};
bool checkForWin(Player &a, int guess, int answer)
{
if (answer == guess)
{
cout << "You're right! You win!" << endl;
return true;
}
else if (answer < guess)
{
cout << guess << endl;
cout << "Your guess is too high." << endl;
a.setMax(guess);
cout << endl;
}
else
{
cout << guess << endl;
cout << "Your guess is too low." << endl;
a.setmin(guess);
cout << endl;
}
return false;
}
void play(Player& player1, Player& player2)
{
int answer = 0, guess = 0;
answer = rand() % 100;
bool win = false;
while (!win)
{
cout << "Player 1's turn to guess." << endl;
guess = player1.getGuess();
win = checkForWin(player1, guess, answer);
if (win) return;
cout << "Player 2's turn to guess." << endl;
guess = player2.getGuess();
win = checkForWin(player2, guess, answer);
}
}
int main()
{
srand(time(NULL));
Human h;
Computer c;
int target = rand() % 100;
play(h, c);
return 0;
}
int Human::getGuess()
{
int a;
cin >> a;
return a;
}
int Computer::getGuess()
{
return rand() % (max - min) + min;
}
엄청 간단한 코드인데 우리가 일상에서 하는 up down 게임을 사람과 컴퓨터가 대결하게끔 만든겁니다 virtual setmin, setMax함수를 virtual로 선언해서 Computer 클래스는 최댓값 최솟값을 저장해서 그 사잇값을 반환하게끔 했는데요
bool checkForWin(Player &a, int guess, int answer)
{
if (answer == guess)
{
cout << "You're right! You win!" << endl;
return true;
}
else if (answer < guess)
{
cout << guess << endl;
cout << "Your guess is too high." << endl;
a.setMax(guess);
cout << endl;
}
else
{
cout << guess << endl;
cout << "Your guess is too low." << endl;
a.setmin(guess);
cout << endl;
}
return false;
}
이 부분에서 Player을 처음에는 원형으로 받으니까 virtual로 안들어가고 그냥 base class의 함수로 자꾸 들어가서 참조자 형태로 해봤는데 되더라구요 어렴풋이는 알겠는데 정확히는 그 이유를 잘 모르겠습니다
댓글 입력