如果我有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;
}我的直觉告诉我,为了重用代码,我应该选择第一个替代方案,因为这通常是一个很好的实践。但同时,感觉它在某种程度上使它变得凌乱,特别是如果我提供更多的功能重载,因为其中只有一个是“控制”功能。
就像我认为我不需要“控制”函数并删除它一样,我也必须为所有其他重载重新编写代码。
发布于 2015-08-29 17:24:27
我应该从另一个叫一个过载吗?
绝对一点儿没错!这是重用代码的极好方法。
或者我应该再做一次有效性检查和赋值。
一般来说,这将违背https://en.wikipedia.org/wiki/Don%27t_repeat_yourself原则,因为相同的验证(如果有的话)必须在两个地方进行。
https://stackoverflow.com/questions/32288715
复制相似问题