如何在 C++ 中的类中返回对象的字符串? [关闭]

Posted

技术标签:

【中文标题】如何在 C++ 中的类中返回对象的字符串? [关闭]【英文标题】:How can I return a String of an object in a class in c++? [closed] 【发布时间】:2017-11-01 23:13:45 【问题描述】:

我想访问属于我的班级的一个字符串,但我似乎无法让它工作。 下面是示例代码:

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

我无法从课堂上的对象中获取字符串... 也许我什至无法让他们进入课堂。 标准构造函数是否像字符串那样工作? 我只想要我可以调用的对象的刺痛(即名称)。 这样做的正确方法是什么?

如果有任何帮助,我将不胜感激,

干杯 尼可

【问题讨论】:

Name=Name; 将函数参数分配给自己,对成员不做任何事情。 成员变量和参数的命名冲突。 Member Initiallizer List 可以在这里为您提供帮助 this-&gt;Name=Name,但实际上只是更改参数或成员名称。 【参考方案1】:

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

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; 

【讨论】:

【参考方案2】:

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

所以改变:

Name=Name;

this->Name = Name;

另外两个也是如此:

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

【讨论】:

以上是关于如何在 C++ 中的类中返回对象的字符串? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中的类中递归调用函数方法?

当我在 C++ 中的类中使用类时收到警告 [关闭]

C ++:如何访问另一个类中的类函数?

如何在 C++ 中的类中创建对象?

C ++对象默认变量[关闭]

在 C++ 中的类中初始化与公共和私有相同的函数:它是如何工作的?