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

时间:2013-04-17 18:09:18

标签: c++ constructor

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

的main.c

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

using namespace std;

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

}

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

4 个答案:

答案 0 :(得分:7)

首先,请注意,您在此处声明setName的本地变量,并将其分配给自身:

void setName(string name) {string name = name;}

会员name不受影响。你想要:

void setName(string name) { this->name = name; }

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

Person (string name) { this->name = name; }

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

Person (string name)
  : name(name)
{ }

这基本上是说“使用name参数初始化name成员”。

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

void printName() {cout << name;} 

答案 1 :(得分:3)

初始化成员变量:

Person(string n) : name(n) {}

答案 2 :(得分:1)

在Person的构造函数中,执行以下操作:

Person (string name)
{
   this->name = name;
}

您可以使用成员初始化列表:

Person(string name)
: name(name) {}

你可以在构造函数中调用你的函数setName

答案 3 :(得分:1)

您需要在构造函数中执行{string name = name;},而不是在set name中。

所以:

 class Person 
 {

 public:
    Person (string name) { this->name = name;}

    void printName(string name) {cout << name;} 
 private:
    string name; 
  };

我会使用不同的变量名称,例如namemy_name,因此不存在混淆。