我当前的一个项目要求我将一个文件的实际名称发送到一个类中,但我无法弄清楚如何将该字符串转换为变量.换句话说,我需要打开Andrew到变量name的Person类.
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)
首先,请注意,您在此处声明一个变量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)
这基本上说" name用name参数初始化成员".
你也有问题printName.它需要一个字符串参数然后打印出来.您似乎更有可能打印出该name成员:
void printName() {cout << name;}
Run Code Online (Sandbox Code Playgroud)