Я пытаюсь сделать наследование классов в C ++, но, очевидно, он работает совсем не так, как в Python.
Сейчас у меня есть два класса, один из которых называется Player
, который является базовым классом, идругой под названием HumanPlayer
- это подкласс.
Класс Player
- это абстрактный класс, который имеет два способа работы.
Первый - это то, что он действует как синглтон.Он имеет одну статическую функцию с именем make_move
, которую люди могут вызывать с int
и TicTacToeGame&
, и он сделает ход для игрока с этим int
в качестве номера игрока в этой игре TicTacToe
.
Во-вторых, он работает как класс для создания объектов, у которых в качестве свойства указан номер игрока.Итак, если вы создаете объект с помощью класса, вы должны получить обратно объект со свойством player_number
.Затем, если вы вызываете функцию make_move
, когда на объекте просто TicTacToeGame&
, он автоматически подключит свой номер игрока и использует метод статического класса, чтобы сделать ход в игре.
Я хочута же функциональность для HumanPlayer
, за исключением того, что я просто хочу написать новую статическую функцию для HumanPlayer
, и все, так как остальные функции остаются прежними.
Вот код:
#include <iostream>
#include <string>
using namespace std;
class TicTacToeGame {
};
class Player {
public:
static void make_move(int player_number, TicTacToeGame& game);
protected:
int player_number;
public:
explicit Player(int player_number_param) {
player_number = player_number_param;
}
public:
void make_move(TicTacToeGame& game) {
return make_move(player_number, game);
}
};
class HumanPlayer: public Player {
public:
static void make_move(int player_number, TicTacToeGame& game) {}
public:
HumanPlayer(int player_number_param): Player(player_number_param) {}
};
int main()
{
TicTacToeGame game;
HumanPlayer human_player = HumanPlayer(2);
human_player.make_move(game);
return 0;
}
Недавно я узнал, что подклассы не наследуют конструкторы, поэтому оказывается, что я должен написать как новую статическую функцию, так и конструктор, что я и сделал.Однако всякий раз, когда я инициализирую новый объект HumanPlayer
, компилятор не может найти совпадение для метода make_move(TicTacToeGame&)
, и я не уверен, почему.
Конкретное сообщение об ошибке Яполучение
C: \ Users \ London \ Desktop \ Python Programs \ LearningC ++ \ FirstProgram_SO.cpp: в функции 'int main ()': C: \ Users \ London \ Desktop \ Python Programs \LearningC ++ \ FirstProgram_SO.cpp: 41: 29: ошибка: нет соответствующей функции для вызова «HumanPlayer :: make_move (TicTacToeGame &)» human_player.make_move (game);^ C: \ Users \ London \ Desktop \ Python Programs \ LearningC ++ \ FirstProgram_SO.cpp: 29: 15: примечание: кандидат: статический void HumanPlayer :: make_move (int, TicTacToeGame &) статический void make_move (int player_number, TicTacToeGame & game) {}^ ~~~~ C: \ Users \ London \ Desktop \ Python Programs \ LearningC ++ \ FirstProgram_SO.cpp: 29: 15: примечание: кандидат ожидает 2 аргумента, при условии 1
Как я могу получитьHumanPlayer
класс для работы так же, как класс Player
делает?