Я разработчик Java, пытающийся забрать C++. Можно ли использовать сеттер внутри конструктора для повторного использования проверок здравомыслия, которые предоставляет сеттер?Использование seters в конструкторе
Например:
#include <stdexcept>
using namespace std;
class Test {
private:
int foo;
void setFoo(int foo) {
if (foo < 42) {
throw invalid_argument{"Foo < 42."};
}
this->foo = foo;
}
public:
Test(int foo) {
setFoo(foo);
};
};
Действительно. Обратите внимание, что существуют типы 'unsigned', чтобы избавиться от теста. – Jarod42
Если вы не хотите, чтобы пользователи класса не проходили отрицательные числа, почему бы не использовать 'unsigned' вместо этого? Затем компилятор будет обрабатывать проверку во время компиляции для вас, а не вам нужна проверка времени выполнения. –
«неподписанный» материал не бесспорен; см., например, https://channel9.msdn.com/Events/GoingNative/2013/Interactive-Panel-Ask-Us-Anything 9:50, 42:40, 1:02:50 (Группа, в которой утверждают несколько видных членов комитета против использования целых чисел без знака для других вещей, кроме бит-возиться.) –