k5054
Между объявлением функции и ее телом не должно быть точки с запятой. Этот
void show_player(Player);
это
прототип, который сообщает компилятору, какова сигнатура функции. Чтобы определить нужную вам функцию
void show_player(Player aPlayer)
{
if(aPlayer.competitive) {
// ...
} else {
// ...
}
}
Записи:
Нам нужно дать аргументу функции имя, как мы делаем, когда определяем переменную. Так например мы могли бы иметь
int playerCompare ( Player Player1, Player Player2 )
который будет сравнивать игрока, возвращающего индикатор, если игрок 1 ранжирован ниже, равен или выше игрока 2. Не называя аргументы, мы не можем отличить Player1 от Player2.
bool
иметь значение
истинный и
ложный. Нам не нужно, чтобы попытаться создать переменную типа bool для проверки. Иногда это действительно помогает сравнивать эксплицитность с истиной или ложью, но вы должны использовать эти значения, а не 1 или 0. Однако будьте осторожны при тестировании не-булов на истинностное значение. В C/C++ ноль-это "ложь", и
какой-нибудь ненулевое значение-это "истина".
Если не указано иное, C++ передает все параметры по значению. Это означает, что создается копия значения, и функция использует эту копию для всех вычислений. Для небольших структур или классов (объектов) это не является большой проблемой, но когда вы добираетесь до больших объектов, вы несете наказание за создание копии для передачи функции. Гораздо лучше было бы
ссылка напр.
void show_palyer(Player& aPlayer)
{
// function body
}
. Обратите внимание на
&усилитель; после типа параметра. Это говорит компилятору использовать ссылку на объект, а не делать копию. Еще лучше, если мы знаем, что мы не собираемся изменять объект, мы можем использовать
const refercence например,
void show_player(const Player& aPlayer)
{
// fuction body
}
Пометив ссылку как
константа мы гарантируем, что мы не можем непреднамеренно изменить объект. Мы также сообщаем компилятору, что объект не будет изменен, поэтому он может выполнить дальнейшую оптимизацию, если это возможно.