C++ 初始化构造函数中的常量字符串?C++; //人员声明 班主任{ 公众: 人(); 常量字符串getName()常量; 私人: 常量字符串名称; }; //人的定义 #包括“Person.h” Player::Player(){ 姓名; }

C++ 初始化构造函数中的常量字符串?C++; //人员声明 班主任{ 公众: 人(); 常量字符串getName()常量; 私人: 常量字符串名称; }; //人的定义 #包括“Person.h” Player::Player(){ 姓名; },c++,string,constructor,constants,C++,String,Constructor,Constants,如果我想在创建类时使用默认构造函数和初始化列表初始化人员的姓名,但在名称为常量的约束下,我该怎么做呢 我不相信name的init列表会起作用,因为据我所知,init列表会在创建时设置值,并且name是一个常量,在这一点上它将不再是可修改的 假设我创造了一个人();在另一个类中,如何在该类实例的生命周期内将它们的名称初始设置为const?不提示在构造函数中输入。将IO移到函数外部,并使构造函数将字符串作为参数。然后,将字符串从用户传递给构造函数 //Person declaration Class

如果我想在创建类时使用默认构造函数和初始化列表初始化人员的姓名,但在名称为常量的约束下,我该怎么做呢


我不相信name的init列表会起作用,因为据我所知,init列表会在创建时设置值,并且name是一个常量,在这一点上它将不再是可修改的


假设我创造了一个人();在另一个类中,如何在该类实例的生命周期内将它们的名称初始设置为const?

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

//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;
}


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

//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;
}


您可以调用函数作为初始值设定项:

std::string name;
std::cin >> name;
Person person(name);
std::string get_name(){
std::cout>nm;
返回nm;
}
Person::Person():name(get_name()){
}

您可以调用函数作为初始值设定项:

std::string name;
std::cin >> name;
Person person(name);
std::string get_name(){
std::cout>nm;
返回nm;
}
Person::Person():name(get_name()){
}


我不会
std::cin>>名字在构造函数中。“我不相信名称的init列表会起作用”它会:)。快速响应伙计们!谢谢你,@Galik,你会推荐什么作为设置名称的另一种方法,另一个限制是我不能使用setter。@George,你能解释一下init列表是如何工作的吗?我试过Player():name(n){cin>>n;}等等,但我不确定这是否是正确的方法。请参阅@the Aspiring Hacker的答案。您可以使用构造函数的init列表在构造函数中。“我不相信名称的init列表会起作用”它会:)。快速响应伙计们!谢谢你,@Galik,你会推荐什么作为设置名称的另一种方法,另一个限制是我不能使用setter。@George,你能解释一下init列表是如何工作的吗?我试过Player():name(n){cin>>n;}等等,但我不确定这是否是正确的方法。请参阅@the Aspiring Hacker的答案。您可以使用构造函数的初始化列表。太好了,谢谢!需要注意的是,在构造函数中引入IO有什么不好的?随着程序变得越来越大,更好的做法是将类作为模块化API,以便其他代码调用,而不是将它们与应用程序方面(如获取输入)交织在一起。如果您想创建一个
Person
对象,其中的名称不能通过用户指定,例如@casperf1,并且您不能从其类的ctor控制范围初始化
const
成员,该怎么办?这是有意义的。非常感谢你的支持。假设我想在另一个类中初始化一个player对象,并在仍然使用这个构造函数的情况下访问它的方法。我可以从OtherClass.cpp/.h调用构造函数吗?@casperf1如果您按原样使用构造,那么当您从OtherClass.cpp创建播放器对象时,将提示用户输入。太好了,谢谢!需要注意的是,在构造函数中引入IO有什么不好的?随着程序变得越来越大,更好的做法是将类作为模块化API,以便其他代码调用,而不是将它们与应用程序方面(如获取输入)交织在一起。如果您想创建一个
Person
对象,其中的名称不能通过用户指定,例如@casperf1,并且您不能从其类的ctor控制范围初始化
const
成员,该怎么办?这是有意义的。非常感谢你的支持。假设我想在另一个类中初始化一个player对象,并在仍然使用这个构造函数的情况下访问它的方法。我可以从OtherClass.cpp/.h调用构造函数吗?@casperf1如果您按原样使用构造,那么当您从OtherClass.cpp创建播放器对象时,将提示用户输入。