Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как узнать тип вводимых данных с помощью перегрузки функции?

37K
02 октября 2011 года
Tolias28
48 / / 20.09.2010
Такое условие задачки: Пользователь вводит данные, а ему программа говорит, какой тип этих данных. Нужно сделать это с помощью перегрузки функций на C++.

Я пока додумался, как сие сделать путем конвертирования одного типа в другой, и если переменная после конвертации "туда-сюда" осталась неизменной, значит это ее тип. Вот что-то наподобие этого:
Код:
char string[128];
cin >> string;
 
if(!strcmp(itoa(atoi(string)), string))
{
    cout << "type is int" << endl;
}else if(!strcmp(ftoa(atof(string)), string))
{
    cout << "type is float" << endl;
}
// и так далее по всех типах...


Но нужно сделать подобное с помощью перегрузок функций. Но только как... Я думаю, что приблизительно вот так, как в следующем куске кода, но он нерабочий..

Код:
ShowType(int value)
{
    cout << "type is int" << endl;
}
 
ShowType(float value)
{
    cout << "type is float" << endl;
}
// и так далее...
 
int main()
{
    cout << " Enter any value: " << endl;
    cout << ShowType(cin) << endl;
    cin.get();
    return 0;
}


Но, естественно, что ничего не получается... Ведь в качестве параметра функции нужно передавать переменную, а не cin, где я пытаюсь сделать ввод с клавы прямо в функцию (смешно звучит...). Но если так, то как мне передать значение в функцию ShowType? Ведь если сделаю вот так:

 
Код:
char *value;
cin  >> value;
ShowType(value);


то смысл весь с программы теряется, так как уже и так известно, что функция ShowType возвратит тип массив char...

Короче говоря, мне немного непонятна логика задачи и путь ее решения. Вообще не представляю, где такое в практике будет надо. Но задачку нужно решить... Помогите пожалуйста разобраться.
278
02 октября 2011 года
Alexander92
1.1K / / 04.08.2008
Цитата: Tolias28
Ведь если сделаю вот так:

[CODE=C++]char *value;
cin >> value;
ShowType(value);
[/CODE]

то смысл весь с программы теряется, так как уже и так известно, что функция ShowType возвратит тип массив char...


Как раз смысл не теряется. Твоя задача - написать _функцию_ (ну или набор перегрузок), которая будет определять тип произвольной переменной. Разумеется, в таком элементарном примере все заранее предопределено, но это и хорошо - ты можешь проверить, правильно ты написал функцию или нет. Так что ты все правильно написал. А где такое в практике будет надо - это простейшая (очень грубая) модель рефлексии, которую потом увидишь в .NET.

316
02 октября 2011 года
Alm3n
889 / / 29.05.2009
О Аллах, кто вам такие задания только придумывает? Попробуй создать объект, и перегрузить его оператор >>, где в реализации будет определяться тип, который потом можно записать в поле объекта или сразу на экран вывести.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог