在构造函数中初始化const字段,但首先检查一个参数
Initialize a const field in constructor but first check one parameter
好的,所以这是我测试中的一项任务。您需要使用const int userId创建类用户,以便每个用户对象都有一个唯一的ID。
我被要求将构造函数与2个参数超载:键,名称。如果密钥为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))
{
// ...
}
};
相关文章:
- 如何检查给定的参数是否为 cv::noArray()?
- 用于检查值是否为其任何参数的帮助程序函数
- 模板化检查是否存在带有参数列表的类成员函数?
- SFINAE 检查模板参数运算符
- 检查两个模板参数是否相同
- 使用参数包自动执行dynamic_cast检查
- 检查类是否具有模板专用化(使用布尔值或 int 等模板参数)
- 为什么 std::bind 静态类型检查传递给函数的参数?
- 如何检查参数包是否具有执行顺序中的确切类型
- C++编译时检查是否可以用某种类型的参数调用重载函数
- 如何检查模板参数是否为给定值?
- 在编译时检查未实例化的类模板是否继承自其第一个模板参数
- C ++回测问题:如何检查构造函数在假定失败时是否失败(给定输入的无效参数)
- 如何检查参数包中的每个类型是否唯一
- 如何在C 中检查参数是否通过
- 检查参数是否为空
- 类型 traits,用于检查参数包中的所有类型是否都是可复制构造的
- 一种在编译时用C++根据printf格式检查参数的可移植方法
- EXPECT_CALL检查参数是否包含给定的子集
- 检查参数是否为动态数组.有必要吗?