Я очень новичок в C ++ и буду очень признателен за любую помощь. У меня есть это задание, которое играет с классами и наследованием. Насколько я понимаю, я могу написать виртуальную функцию в базовом классе, которая переопределяется функциями с тем же именем в унаследованных классах. Когда я вызываю какой-либо из унаследованных классов, это работает просто отлично, но когда я подключаю их к функции, написанной для приема в базовый класс, даже когда получаемые им объекты являются наследниками классов, он вызывает инициализаторы из унаследованного класса, но другие функционирует только из базового класса. Вот сокращенная версия моего кода:
базовый класс:
#ifndef PLAYER_CPP
#define PLAYER_CPP
class Player
{
protected:
string playerThrow;
public:
//function that sets player throw
void virtual setMove();
string performMove() {return(playerThrow);}
};
#endif
унаследованный класс:
class Avalanche: virtual public Player
{
public:
Avalanche();
//set specific move for class
void setMove()
{
//always plays rock
playerThrow = "rock";
}
};
//initializer, inherit from player, set new name
Avalanche::Avalanche() : Player()
{
//initialize name string
string newName;
//set name
newName = "Avalanche Player";
//sets name in player class
name = newName;
}
Как я пытаюсь это использовать:
class Tournament
{
public:
Tournament();
Player bout(Player, Player);
Player Tournament::bout (Player p1, Player p2)
{
p1.setMove();
p2.setMove();
return p1;
}
};
то, что это делает, сводит на нет движение, а не «качает».
Заранее спасибо за любые указатели в правильном направлении. Это меня озадачило.
-Victoria