我希望能够访问属于我班级的字符串,但我似乎无法使其正常工作。 这是示例代码:
#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;
}
我无法从班级中的对象中获取字符串... 也许我甚至无法让他们进入课堂。 标准构造函数是否像字符串一样工作? 我只想要一个我能称之为物体的刺痛(即名字)。 这样做的正确方法是什么?
我很感激任何帮助,
欢呼声 尼科
答案 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;