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

Initialize a const field in constructor but first check one parameter

本文关键字:检查 参数 一个 初始化 构造函数 const 字段      更新时间:2023-10-16

好的,所以这是我测试中的一项任务。您需要使用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))
    {
        // ...
    }
};