У меня есть структура, игрок, который выглядит следующим образом:
struct player {
string name;
int rating;
};
Я хотел бы изменить его так, чтобы я объявлял структуру с двумя аргументами:
player(string, int)
это присваивает содержимое структуры с этими значениями.
Хотя (как уже было отмечено), вы можете просто добавить конструктор:
struct player() {
string name;
int rating;
player(string Name, int Rating) {
name = Name; rating = Rating;
}
};
Есть ли какая-то причина, по которой вы не хотите делать это классом?
class player() {
public:
string name;
int rating;
player(string Name, int Rating) {
name = Name; rating = Rating;
}
};
Помимо предоставления вашего типа конструктор, потому что, как показано, это совокупный типа, вы можете просто использовать агрегатную инициализацию:
player p = { "name", 42 };
вы бы использовали конструктор, вот так:
struct player {
player(const string& pName, const int& pRating) :
name(pName), rating(pRating) {} // << initialize your members
// in the initialization list
string name;
int rating;
};
Вы можете объявить конструктор для вашего player
структура:
struct player {
string name;
int rating;
player(string n, int r) :
name(n),
rating(r)
{
}
};
В C ++ один из немногих различия между классами и структурами в том, что члены класса по умолчанию имеют значение private, а члены структуры по умолчанию — public.