委派列出初始化的构造函数,空字段

阿里纳克

因此,我有以下简单的设置。

.hpp

class User {
std::string firstName;
std::string lastName;
std::string email;
std::string phoneNr;

public:
    User(std::string firstName, std::string lastName, std::string email);
    User(std::string firstName, std::string lastName, std::string email,
        std::string phoneNr);
    friend std::ostream& operator<<(std::ostream &o, User &u);
};

.cpp

   User::User(std::string fName, std::string lName, std::string email)
    :firstName(fName),lastName(lName),email(email){
}


//Works
User::User(std::string fName, std::string lName, std::string email,
    std::string phoneNr)
    :firstName(fName), lastName(lName),email(email),phoneNr(phoneNr){
}

//Does not work
User::User(std::string fName, std::string lName, std::string email,
    std::string phoneNr){
    User(fName,lName,email,phoneNr);
    this->phoneNr = phoneNr;
}


std::ostream& operator<<(std::ostream &a, User &b){
    a<<b.firstName<<" "<<b.lastName<<std::endl;
    a<<b.email<<std::endl;
    a<<b.phoneNr<<std::endl;
}

现在,为什么将我委托给第一个构造函数的第二个构造函数的实现留为空白呢?这对我来说意义不大,第一个构造函数被调用(由打印输出验证),但是它没有初始化任何东西。

这是否意味着在c ++中,如果必须将所有构造函数委托给列表初始化的构造函数,我将不得不对它们使用列表初始化?

普拉丹

委托应该在成员初始化器列表中进行。您只是在创建一个User临时文件。这是固定的语法:

User::User(std::string fName, std::string lName, std::string email,
    std::string phoneNr) : 
    User(fName,lName,email)
{
    this->phoneNr = phoneNr;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章