在构造函数中初始化一个常量字符串? C ++

时间:2017-12-11 01:56:11

标签: c++ string constructor const

//Person declaration
Class Person {
    public:
        Person();
        const String getName() const;
    private:
        const String name;
};

//Person definition
    #include "Person.h"
    Player::Player() {
    cout << "Enter name: ";
    cin >> name;
}

如果我想在创建类时初始化人名,使用默认构造函数和初始化列表,但是name_的约束是const,我该怎么做?

我不相信名字的初始列表会起作用,考虑到我的知识,初始列表在创建时设置值,并且名称为const,此时它不再可修改

假设我创建了一个Person();在另一个类中,我怎样才能在该类实例的生命周期内将其名称初始设置为const?

2 个答案:

答案 0 :(得分:5)

不要在构造函数中提示输入。将IO移到函数外部,并使构造函数将字符串作为参数。然后,将字符串从用户传递给构造函数。

class Person {
public:
    Person(const std::string& name)
      : name_(name) {}
    const std::string& getName() const { return name_; }
private:
    const std::string name_;
};

...

std::string name;
std::cin >> name;
Person person(name);

答案 1 :(得分:0)

您可以将函数作为初始化程序调用:

std::string get_name() {
    std::cout << "Name: ";
    std::string nm;
    std::cin >> nm;
    return nm;
}

Person::Person() : name(get_name()) {
}