Программа выводит информацию о дате рождения.
Есть класс 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;
}
Answers & Comments
Так как из-за структуры языка все символы, вводимые для типа 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
Вы ввели неверные данные!