如何在c ++中返回类中对象的String?

时间:2017-11-01 23:13:45

标签: c++ string class

我希望能够访问属于我班级的字符串,但我似乎无法使其正常工作。 这是示例代码:

#include<iostream>
#include<string>
#include<vector>


class element {
    std::string Name;
    int Z;
    double N;
  public:
    element (std::string,int,double);
    double M (void) {return (Z+N);}
    std::string NameF () {return (Name);}
};

element::element (std::string Name, int Z, double N) {

    Name=Name;
    Z=Z;
    N=N;
}

int main () {


  element H ("Hydrogen",1,1.);
  element O ("Oxygen",8,8);

    std::vector<element> H2O ={H,H,O};

    std::cout<<"Mass of " <<O.NameF()<<" is: " << O.M() << std::endl;
    std::cout<<H2O[1].NameF()<<std::endl;

  return 0;
  }

我无法从班级中的对象中获取字符串... 也许我甚至无法让他们进入课堂。 标准构造函数是否像字符串一样工作? 我只想要一个我能称之为物体的刺痛(即名字)。 这样做的正确方法是什么?

我很感激任何帮助,

欢呼声 尼科

2 个答案:

答案 0 :(得分:4)

对于构造函数,您应该使用初始化列表,其中编译器知道参数和成员之间的区别:

class element {
    std::string Name;
    int Z;
    double N;
  public:
    element (std::string,int,double);
    double M (void) {return (Z+N);}
    std::string NameF () {return (Name);}
};

element::element (std::string Name, int Z, double N)
: Name(Name), Z(Z), N(N) // <- the compiler knows which is parameter and which is member
{
    // no need to put anything here for this
}

否则,您可以使用this明确区分:

void element::set_name(std::string const& Name)
{
    // tell the compiler which is the member of `this`
    // and which is the parameter
    this->Name = Name; 
}

答案 1 :(得分:3)

如果您使用成员的名称作为参数的名称,则需要通过this指针访问该成员。

所以改变:

Name=Name;

this->Name = Name;

其他两个也是如此:

this->Z = Z;
this->N = N;