2016-03-09 6 views
0

Я только что начал с OO, и у меня возник вопрос о конструкторах. Это просто создаст тот же объект «Team a» снова и снова с другим параметром i, правильно?Конструктор in for loop

for (int i = 1; i < n+1; i++) Team a (i); // construct teams 

Как я могу создавать различные «команды», то есть команда А, Team B ... Team час, если я знаю, сколько команд там должно быть? Не может ли параметр i быть атрибутом и именем в одно и то же время (команда 1, команда 2)?

Спасибо в продвинутом виде за любой отзыв или помощь!

Pd: это конструктор, я использую (если вам нужно больше кода, пожалуйста, напишите его в комментариях):

public: 
//constructors 
Team(int n); // (this will set number to n and points, goals_scored, goals_lost to 0) 
+3

Магазин команды в 'станд :: вектор ' и использовать 'push_back (а),' внутри цикла. –

+0

Да, вы можете использовать такой параметр. Как уже указывалось, ваша текущая попытка создает и удаляет 'a' в теле цикла, потому что он является локальным. Создайте вектор вне цикла и вставьте в него новые команды. – SpamBot

+0

Re: «создать тот же объект ...»: это создало бы ** другой ** объект 'Team a' каждый раз. Объект, который вы получаете во втором проходе через цикл, не имеет никакого отношения к объекту, который вы получили на первом проходе. –

ответ

3

Вы можете использовать std::vector:

std::vector<Team> teams; 

for(int i = 0; i < n; ++i) 
    teams.emplace_back(i + 1); // makes Team(i + 1) in vector 

Примечание:std::vector использует нулевой индексации на основе так что ваша команда # 1 Индекс 0:

teams[0]; // team #1 
teams[1]; // team #2 
teams[n]; // team #n + 1 
0

первый вопрос: да, он будет производить п раз переменную a типа Team , Но (!) Он локален для цикла for на каждой итерации. Вы не сможете использовать их позже.

2-й вопрос: чистые номера не могут быть именами. Это не работает:

int 1 = 1; // not(!) valid 

Вы можете использовать что-то вроде этого:

int a_1 = 1 ; 
int a_2 = 2; 

Но вы не можете произвести это с помощью переменной:

for (int i = 1; i < n+1; i++){ 
    int a_i = 1; // defines a local variable "a_i" 
    int i = i ;// not valid i is already defined 
} 

Вы должны использовать контейнер (например, вектор) команд.

+0

Спасибо, что ответили на вопросы, знаю, что я не буду делать ту же ошибку в следующий раз :) – jonathan9879

1

Вы хотели бы использовать map из STL:

std::map <string, Team> Teams; 
for (int i = 1; i < n+1; i++) 
{ 
    std::string noStr = std::to_string(i); 
    std::string teamName = "Team " + noStr; // "Team 1", "Team 2", ..., "Team N" 
    Teams[teamName] = Team(i); // Store Team object in the map 
} 

Теперь вы можете получить доступ к любой команде, используя его имя:

// For team 5 object 
Teams["Team 5"] 
+0

Спасибо за ответ, я делаю карты на следующей неделе, но сохраню это для будущего :) – jonathan9879