Sono uno sviluppatore Java che tenta di acquisire C++. Va bene usare un setter all'interno di un costruttore per riutilizzare i controlli di sanità che fornisce il setter?Utilizzo dei setter nel costruttore
Ad esempio:
#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);
};
};
È valido. Si noti che esistono tipi 'unsigned' per sbarazzarsi del test qui. – Jarod42
Se non si desidera che gli utenti della classe non trasmettano numeri negativi, perché non utilizzare invece 'unsigned'? Quindi il compilatore gestirà il controllo al momento della compilazione per te, invece di aver bisogno di un controllo di runtime. –
La roba 'unsigned' non è indiscussa; vedere per es. https://channel9.msdn.com/Events/GoingNative/2013/Interactive-Panel-Ask-Us-Anything 9:50, 42:40, 1:02:50 (Panel in cui alcuni importanti membri del comitato discutono contro l'uso di numeri interi senza segno per cose diverse dal bit-fiddling). –