c ++如何将名称传递给基类的构造函数

Fra*_*ser 1 c++ constructor arguments class base

我有两个类,我希望子类的每个对象都有一个名称,它作为参数传递给超类的构造函数.我该怎么做呢?

class base
{
   public:
     base(const char * name) {name = name;}
     const char * getName() {return name;};
   private:
     const char * name;
};
class derived : public base
{
   public:
     derived(const char * name) : base(name) {}
};
Run Code Online (Sandbox Code Playgroud)

然而,

int main(int argc, char **argv)
{
    derived d("test");
    std::cout << d.getName();
}
Run Code Online (Sandbox Code Playgroud)

产生乱码作为控制台输出.

mar*_*inj 5

您需要为参数选择更好的名称name:

base(const char * p_name) {name = p_name;}
Run Code Online (Sandbox Code Playgroud)

在你的代码中,你只是为自己分配名称.

其他可能的方案:

base(const char * name) : name(name) {} // preferred one
base(const char * name) {base::name = name;}
base(const char * name) {this->name = name;}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果OP使用构造函数初始化列表而不是构造函数体,这不会成为问题. (2认同)