如何将通过构造函数传递的字符串转换为变量?

the*_*ace 1 c++ constructor

我当前的一个项目要求我将一个文件的实际名称发送到一个类中,但我无法弄清楚如何将该字符串转换为变量.换句话说,我需要打开Andrew到变量namePerson类.

main.c中

#include <iostream>
#include <string>
#include "Person.h" 

using namespace std;

int main ()
{
Person p1("Andrew");

}
Run Code Online (Sandbox Code Playgroud)

Person.h

 #include <iostream>

 using namespace std;

 class Person 
 {
 public:
    Person (string name);
    void setName(string name) {string name = name;}
    void printName(string name) {cout << name;} 
private:
    string name; 
  };
Run Code Online (Sandbox Code Playgroud)

Jos*_*eld 7

首先,请注意,您在此处声明一个变量local to setName并简单地将其赋值给自己:

void setName(string name) {string name = name;}
Run Code Online (Sandbox Code Playgroud)

该成员name不受影响.你想要:

void setName(string name) { this->name = name; }
Run Code Online (Sandbox Code Playgroud)

您可以使用构造函数执行相同的操作:

Person (string name) { this->name = name; }
Run Code Online (Sandbox Code Playgroud)

但是,这有一点问题.创建Person对象时,该name成员将首先构造为空字符串,然后分配给.这完全没有意义.如果我们可以立即用参数给出的值来构造它,那就太棒了.实际上,我们可以使用成员初始化列表:

Person (string name)
  : name(name)
{ }
Run Code Online (Sandbox Code Playgroud)

这基本上说" namename参数初始化成员".

你也有问题printName.它需要一个字符串参数然后打印出来.您似乎更有可能打印出该name成员:

void printName() {cout << name;} 
Run Code Online (Sandbox Code Playgroud)