gpt4 book ai didi

c++ - Scott Meyers 关于偏好非成员非友元方法的建议是否适用于对象构造?

转载 作者:可可西里 更新时间:2023-11-01 18:29:07 25 4
gpt4 key购买 nike

假设我有一个类:

class C{
int x_;
int y_;
public:
C(int x, int y): x_(x), y_(y){}
};

然后我想从一个字符串中添加结构,它只会解析 xy。在阅读 Meyers 的书之前,我通常会将它作为 C 类中的另一个构造函数。但是,也可以使其成为非成员(member)非好友:

C CFromString(const std::string& s){
int x, y;
//...parse them somehow, throw exception if needed...
return C(x,y);
}

对我来说,这是许多“值类”的标准情况,当有一个“主”构造函数将私有(private)成员设置为提供的值时(可能检查那里的正确性)。此类类的其他构造函数通常只是根据其他一些参数计算这些值。

像我的示例中那样使此类构造函数成为非成员非好友有什么缺点吗?

Upd. 我理解 Meyers 的建议,以及 NMNF 函数的优势是什么。他的书中没有 NMNF 对象构造的示例,所以我想确保他的建议也适用于构造。

最佳答案

如果您开始为一个类的每一种可能的序列化方式添加构造函数,那么您就是将该类与那些序列化方法紧密耦合。

为了分离关注点,最好将类和序列化器分开。让类专注于类做什么,序列化程序专注于它做什么(读取 json 或其他)

您必须考虑到您的类可能是从文件、套接字、json、xml、数据库......从任何数量的东西中序列化的。

这就是为什么在现代编程中我们使用接口(interface)。我们还使用工厂模式。

关于c++ - Scott Meyers 关于偏好非成员非友元方法的建议是否适用于对象构造?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43105007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com