在操作数据成员时:以下哪一种被认为是最佳实践
When manipulating data members: which of the following is considered best practice
我想开始采用最佳实践,并且已经看到类成员以不同的方式被操纵。在下面的例子中,我不知道有什么细微或显著的区别。
我希望澄清一个最佳的方法,如果这两个或另一个建议中的任何一个。
const Fraction & Fraction::timesEq(const Fraction & f) {
//First approach
numerator *= f.numerator;
denominator *= f.denominator;
//Second approach
numerator *= f.getNumerator();
denominator *= f.getDenominator();
return (*this); //would 'return' statement this be considered best practice?
}
第二种方法保留了子类和方法的可能的虚拟重新定义,如果这对特殊情况很重要,但更麻烦和无聊。
在表示有理数的简单类中,如您的类,我将遵循KISS原则并使用前者。
如果类更复杂和/或您需要灵活的(可能是虚拟的)getter/setter,那么保持一致并与表示完全解耦可能是一个好主意:
const Fraction & Fraction::timesEq(const Fraction & f) {
setNumerator(getNumerator() * f.getNumerator());
setDenominator(getDenominator() * f.getDenominator());
return *this;
}
是否值得增加复杂性需要逐个决定。
我推荐第三种方法。它将函数与分子和分母的表示隔离开来。
onst Fraction & Fraction::timesEq(const Fraction & f) {
this->getNumerator() *= f.getNumerator();
this->getDenominator() *= f.getDenominator();
return (*this);
}
相关文章:
- 为什么rand()的使用被认为是不好的
- 为什么 std::shared_ptr 被认为是"heavy"和"expensive",但 std::array "same perfprmance as plain (c-style) arrays
- 一个C头文件可以被认为是一个接口吗
- 为什么const char*和const char[]作为函数参数被认为是等价的
- 为什么12.0==11.999999999999999999被认为是真的
- 这会被认为是糟糕的编程实践吗?
- 拥有来自 C# C++模拟 ContainsKey (TKey) - 什么是最佳实践?
- co_await似乎不是最佳的?
- 为什么这被认为是恒定的?
- 抽象类/接口中的空方法是否被认为是一种好的做法?
- 如果我具有调用其其他实例之一的超载函数,它是否被认为是递归功能
- std::unique_ptr可以被认为是一个monad吗?
- C++ 指向类的指针和/或引用是否被认为是"movable"?
- 使用自定义宏来简化 cin 和 cout 语句等内容被认为是更好还是更差
- 使用成员函数更改对象或返回并分配它是否被认为是更好的做法?
- 我很难修复我认为是双重免费的东西
- 使用 #define 被认为是"bad practice"吗?
- 是一个被认为是不同类型的班级内部的正向声明
- 这被认为是有效的C 11还是C 14?还是GCC/Clang弄错了
- 在操作数据成员时:以下哪一种被认为是最佳实践