Программа выводит информацию о дате рождения. есть класс date и унаследованный от него birthday. в конструктор класса birthday нужно передать три значения типа int, для дня, месяца и года соответственно. если передавать значения вручную прямо из программы - все прекрасно. но если доверить пользователю самому вводить эти значения с клавиатуры (что логично) и записывать их в какие-либо переменные, а потом передавать значения этих переменных в конструктор - появляется возможность ввода данных любых типов, приводимых к int. как проверить, что пользователь действительно ввёл с клавиатуры целые числа? и если введены недопустимые значения (например, буква или же строка, содержащая буквы, и т.д) обработать ошибку с try - catch - throw? #include #include using namespace std; class date { protected: int day, month, year; public: date () { day = 0; month = 0; year = 0; } void info () { cout«"day: "«day«endl; cout«"month: "«month«endl; cout«"year: "«year«endl; cout«endl; } }; class birthday : public date { public: birthday (int d_day, int m_month, int y_year){ day = d_day; month = m_month; year = y_year; } }; int main() { birthday ilya(17,10,1999); birthday alina(5,2,1999); birthday angelina(5,2,1999); ilya.info(); alina.info(); angelina.info(); return 0; }
Так как из-за структуры языка все символы, вводимые для типа int превращаются в 0, то после ввода в main можно проверяться на наличие нуля. Это никак не навредит программе, поскольку в датах не может быть нуля.
Кодint main()
{
int day = 0, month = 0, year = 0;
cout << "Ilya (d//m//y): ";
cin >> day >> month >> year;
if((day == 0) || (month == 0) || (year == 0)){
cout << "Вы ввели неверные данные!";
return 0;
}
else{
// ...
}
return 0;
}
ПроверкаIlya (d//m//y): six 3 1999
Вы ввели неверные данные!
Ilya (d//m//y): ( 8 1954
Вы ввели неверные данные!