Open alexey-malov opened 7 years ago
void CStudent::Rename(std::string const & name, std::string const & surname, std::string const & patronymic)
{
if ((name.length() > 0) && (name.compare(" ") != 0) &&
(surname.length() > 0) && (surname.compare(" ") != 0))
{
m_name = name;
m_surname = surname;
}
else
{
throw std::invalid_argument("Names and surnames values must be non empty and non space value");
}
if ((name.length() > 0) && (patronymic.compare(" ") == 0))
{
throw std::invalid_argument("Patronymic value must non space value");
}
else
{
m_patronymic = patronymic;
}
}
bool StringContainOnlySpaces(std::string const & s)
{
for (int i = 0; i < (int)s.length(); ++i)
{
if (s[i] != ' ')
{
return false;
}
}
return true;
}
try
{
m_name = name;
m_surname = surname;
m_patronymic = patronymic;
}
catch (std::exception)
{
throw;
}
[ ] Исключения следует ловить по ссылке, а не по значению, чтобы избежать срезки.
[ ] ловить и сразу выбрасывать без какой либо обработки аналогично тому, чтобы вообще не ловить. Кроме того, исключения, отличные от std::exception все равно пройдут мимо обработчика
[ ] выброс исключения при присваивании строк (bad_alloc), приведет к тому, что студент переименуется частично. Посмотрите, в лекции должен быть разбор этой ситуации.
[x] упростить сравнение
[x] а что, если пробелов будет 2?