Хорошо, так что это была задача, которую я выполнил на своем тесте.
Вам необходимо создать класс User с const int userID, чтобы у каждого объекта User был уникальный идентификатор.
Меня попросили перегрузить конструктор двумя параметрами: ключ, имя. Если ключ был 0, то у пользователя будет уникальный идентификатор, иначе пользователь получит ID пользователя = -1.
Я сделал это:
class User{
private:
static int nbUsers;
const int userID;
char* name;
public:
User(int key, char* name) :userID(nbUsers++){
if (name != NULL){
this->name = new char[strlen(name) + 1];
strcpy(this->name);
}
}
};
Я не знаю, как сначала проверить, равен ли параметр ключа 0, а затем инициализировать const userID.
Какие-нибудь мысли?
Вы можете использовать троичный оператор, так что он может быть вызван непосредственно в списке инициализации конструктора:
class User
{
private:
static int nbUsers;
const int userID;
char* name;
public:
User(int key, char* name) : userID(key == 0 ? -1 : nbUsers++)
{
// ...
}
};
стандарт гарантирует, что только одна из ветвей будет оценена, так nbUsers
не будет увеличен, если key == 0
,
В качестве альтернативы вы можете использовать вспомогательную функцию:
int initDependingOnKey(int key, int& nbUsers)
{
if(key == 0) return -1;
return nbUsers++;
}
class User
{
private:
static int nbUsers;
const int userID;
char* name;
public:
User(int key, char* name) : userID(initDependingOnKey(key, nbUsers))
{
// ...
}
};
Других решений пока нет …