참조자와 가상함수 관계

조회수 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의 함수로 자꾸 들어가서 참조자 형태로 해봤는데 되더라구요 어렴풋이는 알겠는데 정확히는 그 이유를 잘 모르겠습니다

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)