gpt4 book ai didi

c++ - 在构造函数中初始化一个 const 字段,但首先检查一个参数

转载 作者:太空宇宙 更新时间:2023-11-04 16:02:40 25 4
gpt4 key购买 nike

好的,这就是我在测试中的任务。您需要创建一个具有 const int userID 的类 User,以便每个 User 对象都有一个唯一的 ID。

我被要求使用 2 个参数重载构造函数:键、名称。如果 key 为 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。有什么想法吗?

最佳答案

您可以使用 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 ,所以如果 key == 0nbUsers 不会递增。


或者,您可以使用辅助函数:

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))
{
// ...
}
};

关于c++ - 在构造函数中初始化一个 const 字段,但首先检查一个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40802970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com