好吧,所以这是我测试时的一项任务。 您需要使用const int userID创建一个User类,以便每个User对象都具有唯一的ID。
我被要求用2个参数重载构造函数:key,name。如果密钥为0,则用户将具有唯一ID,否则用户将获得userID = -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);
}
}
};
我不知道如何首先检查key参数是否为0然后初始化const userID。 有什么想法吗?
答案 0 :(得分:5)
您可以使用ternary operator,以便可以在构造函数初始化列表中直接调用它:
class User
{
private:
static int nbUsers;
const int userID;
char* name;
public:
User(int key, char* name) : userID(key == 0 ? -1 : nbUsers++)
{
// ...
}
};
standard guarantees that only one of the branches will be evaluated,如果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))
{
// ...
}
};