如果我有setter函数重载
void setDamageRange(const Range& r);
void setDamageRange(int min, int max);
我可以使用其他
中的一个重载void Weapon::setDamageRange(const Range& r)
{
setDamageRange(r.min, r.max);
}
void Weapon::setDamageRange(int min, int max)
{
mDamageRange.min = min;
mDamageRange.max = max;
}
我应该这样做吗?或者我应该再次进行所有有效性检查和分配
void Weapon::setDamageRange(const Range& r)
{
mDamageRange = r;
}
void Weapon::setDamageRange(int min, int max)
{
mDamageRange.min = min;
mDamageRange.max = max;
}
我的直觉告诉我,我应该选择第一种方法来重用代码,因为这通常是一种很好的做法。但与此同时,感觉就像它在某种程度上使它变得混乱,特别是如果我提供更多的函数重载,因为它们中只有一个是“控制”函数。
就像我认为我不需要“控制”功能并将其删除一样,我也必须为所有其他重载重写代码。
答案 0 :(得分:3)
我应该[从另一个调用一个重载]吗?
绝对!这是重用代码的绝佳方式。
或者我应该再次进行所有有效性检查和分配
通常,这会违反Don't Repeat Yourself原则,因为相同的验证(如果有的话)必须进入这两个地方。