在C ++中更改struct内部元素的方法?

时间:2018-09-19 16:11:32

标签: c++ methods struct

我有一个结构,其中有两个具有值的字段。我想实现一种更改字段值的方法。我使用以下代码完成了此操作,但这是不正确的。我想问一下我该如何解决?

  if (this.obj[i] == null) { this.obj[i] = {};}
  this.obj[i].test = "Whoever";

4 个答案:

答案 0 :(得分:1)

一个结构像一个类一样工作,唯一的区别是,默认情况下,该结构中的所有内容都是公共的。

因此您可以(在这种情况下,您必须)在struct中声明setName

答案 1 :(得分:0)

类似的东西:

void SetName(CPerson& p, const char* szName) {
    p.name = szName;
}

请注意,szName参数可能指向其生存期可能在CPerson::name的生存期结束之前的数组。这使CPerson::name成为无效的指针。

答案 2 :(得分:0)

您需要使其成为成员函数

#include <iostream>
using namespace std;
struct CPerson {
    const char* name = "Ivan";
    const char* gender = "Male";


   void SetName(const char* szName) {
    //what to write here?
    name = szname;
}
};

该代码仍然是错误的,因为它只是在玩弄指针。您应该使用std :: string来存储字符串。但是至少代码可以编译;

答案 3 :(得分:0)

  

我想实现一种更改字段值的方法。

我不确定您应该这样做。

您会看到,默认情况下,结构的字段是可公开访问的-这意味着任何人都可以更改方法(无方法)或更改方法。为什么要麻烦写这样的方法?不是多余的吗?

如果您使用的是 class 而不是结构,或者您已将字段访问权限设置为protectedprivate,那么有意义的是设置字段值,例如:

#include <string>
#include <string_view>

struct Person {
protected:
    std::string name = "Ivan";
    std::string gender = "Male";

public:
   void changeName(std::string_view new_name) {
       name = new_name;
   }
};

string_view是C ++ 17中的新功能;在此之前,您可以使用const std::string&)。

但是即使那样,拥有它也不总是一个好主意。同样,在您的这种结构中,有一个默认的名称和性别,没有充分的理由。除了这两种方法,您还可以使结构不可变:

#include <string>

struct Person {
    const std::string name;
    const std::string gender;
};

对于许多应用程序来说,这是很有意义的(例如,如果您是从某个数据库中获得的,而不是跟踪一个人的一生中的姓名和性别)。