[英]Implementing models, struct vs. class
假设我有一个REST服务,它使用以下方案返回JSON对象:
{
"id" : 1
"name" : "Peter"
"age" : 25
}
我有一个用C ++编写的应用程序,该应用程序接收此对象并反序列化以供以后使用。 我需要一个数据结构来存储对象。
我可以使用任何一种结构来实现:
struct person
{
int id;
string name;
int age;
};
并具有帮助函数来初始化结构:
// Returns a person deserialized from a JSON object
person fromJson(JsonObject obj);
// Usage:
auto personInfo = fromJson(/* JSON object from REST service */);
或者有一个带有getters,setters和构造函数的类,该构造函数将JsonObject作为参数并自行反序列化:
class person
{
public:
// Deserialized a JSON object and initializes the private fields
person(JsonObject obj);
int id() const;
string name() const;
int age() const;
void setId(int id);
void setName(string name);
void setAge(int age);
private:
int _id;
int _name;
int _age;
};
// Usage:
person personInfo{ /* JSON object from REST service */ };
假设数据将存储在客户端计算机上,进行显示,可能进行编辑然后再发送回REST服务,那么哪种实现更适合使用? 由于我只会使用数据结构来存储数据(使用设置器/获取器除了设置/获取值外,不会触发其他任何事情),除了个人喜好之外,我真的无法想到一个人相对于另一个人的任何好处。
我会去上课路线。 在这种情况下,您正在使用的对象可以完成所有需要做的事情(无需使用辅助方法即可创建该对象),并且正在使用的对象很明显。 而且,随着您的应用程序变得越来越复杂,它将使保持对象的结构和功能的逻辑性和实用性变得更加容易。
在C ++中, struct
和class
之间的唯一区别是默认访问说明符,该默认访问说明符对structs
是public
,对于类是private
的。 您可以使用带有成员函数,构造函数,移动分配等的struct
,该struct
与class
相同。 在构造函数中进行反序列化或具有自由功能完全取决于您。 另一种选择是有一个static
的成员函数person
返回一个person
对象。
class person {
public:
static person fromJSON(JsonObject const& src) { ... }
};
auto p = person::fromJSON(source);
无论如何,您都将需要大量验证代码,因为您传递的可能是有效的任意JSON对象,并且请务必遵循3/5/0的规则,这样就不会意外抑制移动语义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.