Валидация в конструктор?
Въпрос към Жоро или който може да даде съвет. :)
Имаме примерен клас:
class Person
{
private:
std::string name;
int age;
public:
Person(std::string name, int age)
: name(name), age(age)
{
}
std::string GetName() const
{
return this->name;
}
void SetName(std::string name)
{
if (name.empty())
{
throw "Person name cannot be empty.";
}
this->name = name;
}
int GetAge() const
{
return this->age;
}
void SetAge(int age)
{
if (age <= 0)
{
throw "Invalid person age.";
}
this->age = age;
}
}
Имаме дадена валидация в сетърите, но в конструктора чрез инициализиращия лист няма как да направим тази валидация.
От C# знаем, че се минава през пропъртитата в конструктора, дали това може да се приложи и тук? Например:
Person(std::string name, int age)
{
this->SetName(name);
this->SetAge(age);
}
Но така пък не се използва инициализиращия лист...
Въобще как е добрата практика в такъв случай?
Благодаря.
Много изчерпателен отговор. Не остави място за допълнителни въпроси. :)
Мерси, Жоро!