公共setter、友类、特定构造函数



我正在制作一种简单的编程语言,并且遇到了以下问题:

我有一个Parser类,它的方法返回Node结构的派生类。目前所有的Parser类方法看起来像这样:

DerivedNode Parser::ParseDerived()
{
DerivedNode node{};
node.Field1 = 0;
node.Field2 = 10;
return node;
}

我最近将Node类型从一个结构转换为一个类,因为我想实现一些oop,因此我将Node类的字段设置为私有。我正在重构Parser类,并努力决定,这3个选项中哪个是最佳选择:

// Option 1: Public setters
DerivedNode Parser::ParseDerived()
{
DerivedNode node{};
node.SetField1(0);
node.SetField2(10);
return node;
}
// Option 2: Making Parser a friend of all Node derived classes
DerivedNode Parser::ParseDerived()
{
DerivedNode node{};
node.m_Field1 = 0;
node.m_Field2 = 10;

return node;
}
// Option 3: Storing in variables and calling a constructor
DerivedNode Parser::ParseDerived()
{
size_t field1 = 0;
size_t field2 = 10;
return DerivedNode{ field1, field2 };
}

我很想听听这些方法中哪一个是最好的,以及为什么(抱歉我的英语)。

假定class具有不变量。除非所有字段值的组合都是正确的,否则强烈建议使用第二个版本;建议是3号。这也是不可变结构的一种方式,它非常有助于调试和测试。

最新更新