Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/26: Рейтинг темы: голосов - 26, средняя оценка - 4.85
27 / 27 / 4
Регистрация: 02.11.2010
Сообщений: 370

Функции, возвращаемый тип

24.06.2012, 20:01. Показов 5783. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сделать так, что бы функция возвращала разный тип данных, в зависимости от некой глобальной переменной?

Например, если эта переменная == 1, то вернуть A, если 2 то вернуть B
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.06.2012, 20:01
Ответы с готовыми решениями:

Перегруженные функции. Возвращаемый тип
Добро всем времени суток. Изучаю Р.Лаворе книгу и наткнулся на непонятныий мне аспект. Вот есть код: String(char s) { ...

Непонятный возвращаемый тип
Расскажите какой тип должен быть у переменной idRe, чтобы можно было бы присвоить ему значение s.length , если s объект класса string?

Возвращаемый тип по умолчанию
Приветствую всех! В книге Р. Лафоре "Объектно-ориентированное программирование в C++" прочитал следующее: Скажите, с чем...

20
Мастер кустарных методов
 Аватар для LEQADA
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680
24.06.2012, 20:03
Прочитайте о структурах.
0
27 / 27 / 4
Регистрация: 02.11.2010
Сообщений: 370
24.06.2012, 21:03  [ТС]
LEQADA, ваш ответ ровным счетом ничего не дал

Добавлено через 5 минут
Есть еще знатоки?
0
 Аватар для RGentum
1 / 1 / 0
Регистрация: 24.06.2012
Сообщений: 49
24.06.2012, 21:37
Покопай в сторону union, либо возвращай из функции тип void*, а потом преобразовывай в указатель на необходимый тип
0
27 / 27 / 4
Регистрация: 02.11.2010
Сообщений: 370
24.06.2012, 21:48  [ТС]
RGentum, дело в том, что в классе и так хранится void*, который ищу как легко преобразовывать к нужному объекту

Насчет union сейчас посмотрю
0
68 / 68 / 18
Регистрация: 03.06.2012
Сообщений: 176
24.06.2012, 21:53
А если шаблоны функций использовать?
1
157 / 157 / 27
Регистрация: 29.03.2012
Сообщений: 418
24.06.2012, 21:55
шаблоны тебе в помощь)
0
 Аватар для RGentum
1 / 1 / 0
Регистрация: 24.06.2012
Сообщений: 49
24.06.2012, 21:58
что значит
Цитата Сообщение от Ksan Посмотреть сообщение
в классе и так хранится void*
?

Добавлено через 1 минуту
попробуй объяснить и показать поконкретнее

Добавлено через 1 минуту
Цитата Сообщение от g-h Посмотреть сообщение
А если шаблоны функций использовать?
а причем тут шаблоны функций?
0
68 / 68 / 18
Регистрация: 03.06.2012
Сообщений: 176
24.06.2012, 22:04
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от RGentum Посмотреть сообщение
а причем тут шаблоны функций?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int global;   // глобальная переменная
 
template <typename T>
T f()
{
   T a;
   ...
   return a;
}
 
int main()
{
   if (global == 1)  f<int>();       // здесь функция возвращает int
   if (global == 2)  f<float>();    // ... float
   if (global == 3)  f<double>(); // ... double
}
3
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.06.2012, 22:11
Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
//---------------------------------------------------------------------------
template<class T>
T sum(T a,T b)
{
 return a+b;
}
//---------------------------------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
system("chcp 1251");
 
float fa=5.5,fb=7.8;
string  sa="строкаA",sb="строкаB"; 
 
cout <<  sum(fa,fb)  <<  endl;  // возвращает float
cout <<  sum(sa,sb)  <<  endl;  // возвращает строку
 
system("pause");
return 0;
}
//---------------------------------------------------------------------------
Вывод:
Code
1
2
3
4
Текущая кодовая страница: 1251
13.3
строкаAстрокаB
Для продолжения нажмите любую клавишу . . .
1
 Аватар для RGentum
1 / 1 / 0
Регистрация: 24.06.2012
Сообщений: 49
24.06.2012, 22:29
g-h, В таком случае, использование таких шаблонов имеет очень узкое применение. Только в случаях с одним и тем же набором действий в функции для разных типов, а также при правильном определении операторов, в данном случае "+". То есть это применимо, но далеко не всегда... Потому и интересно было узнать о конкретной задаче.
Видимо в данном вопросе это не подходит.
1
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.06.2012, 23:11
Ну а перегрузка/специализация для чего?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using namespace std;
//--------------------------------------------------------------------------
template<class T>
T sum(T a,T b)
{
 return a+b;
};
//--------------------------------------------------------------------------
template<>
string sum(string a,string b)
{
 int i= atoi(a.c_str())+atoi(b.c_str());
 char buf[255];
 sprintf(buf,"%i",i);
 
 return string(buf);
};
//--------------------------------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
system("chcp 1251");
 
float fa=5.5,fb=7.8;
string  sa="1",sb="2";
 
cout <<  sum(fa,fb)  <<  endl;  // возвращает float
cout <<  sum(sa,sb)  <<  endl; // возвращает строку
 
system("pause");
return 0;
}
//---------------------------------------------------------------------------
Code
1
2
3
4
Текущая кодовая страница: 1251
13.3
3
Для продолжения нажмите любую клавишу . . .
0
 Аватар для RGentum
1 / 1 / 0
Регистрация: 24.06.2012
Сообщений: 49
24.06.2012, 23:19
Цитата Сообщение от Avazart Посмотреть сообщение
Ну а перегрузка/специализация для чего?
Вот именно. Перегрузка, специализация... А сколько теперь на это кода уйдет? А сколько лишних извратов? Легче однозначно union сделать, либо возвращать указатель на void.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.06.2012, 23:22
Ну приведите пример кода с union... а то так я как то плохо понимаю о чем вы...
0
 Аватар для RGentum
1 / 1 / 0
Регистрация: 24.06.2012
Сообщений: 49
24.06.2012, 23:36
Я надеюсь, что автор всё же объяснит точнее задачу и в каком виде должна вестись работа с типами...

Добавлено через 5 минут
Цитата Сообщение от Avazart Посмотреть сообщение
Ну приведите пример кода с union... а то так я как то плохо понимаю о чем вы...
Вот например:
C++
1
2
3
4
5
6
union u_color {
struct s_color { 
unsigned char a, b, g, r;
} uc_color;
unsigned int i_color; 
};
То есть из структуры union можно вытащить как тип в виде структуры цвета, либо как число типа инт. В общем, переменные используют одну и ту же область памяти, но проецироваться могут по разному по велению пользователя

Добавлено через 54 секунды
Выравнивание только немного сбилось.

Добавлено через 7 минут
А вот информация с родного сайта
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.06.2012, 23:56
А ф-ция как тогда должна выглядеть?
0
 Аватар для RGentum
1 / 1 / 0
Регистрация: 24.06.2012
Сообщений: 49
25.06.2012, 00:26
Так же, как любая другая функция. Единственное, трудности может вызвать объединение управляемого и неуправляемого кода. В общем случае лучше использовать void* - кода мало, и ошибок мало. Но раз автор уточнять ничего не хочет, видимо никакого толку не будет.

Добавлено через 11 минут
Еще, по-моему, в библиотеке boost есть тип variant для этого. Но опять же, это целая БИБЛИОТЕКА кода, поэтому её использовать нужно только если проект большой, а для курсовой конечно же глупо

Добавлено через 1 минуту
пока не увижу более точной задачи от автора, и немножко кода, больше нет особого желания перечислять.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.06.2012, 00:28
Так же, как любая другая функция
Это как это?
Я не телепат...
0
 Аватар для RGentum
1 / 1 / 0
Регистрация: 24.06.2012
Сообщений: 49
25.06.2012, 00:39
Цитата Сообщение от Avazart Посмотреть сообщение
Это как это?
Я не телепат...
Где возвращаемый функцией тип пишется знаешь? А знаешь что на место типа также можно ставить имя структуры, т.е. класса, т.е. типа. А union - это что-то типа класса или структуры, только использующей одну область памяти для всех её членов. Так вот её имя ставится на место возвращаемого типа.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.06.2012, 00:43
А знаешь что такое код?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.06.2012, 00:43
Помогаю со студенческими работами здесь

Перегрузка оператора - возвращаемый тип
class A { private: int x; public: A&amp; operator += (int y); }; A&amp; A::operator += (int y) { x = y; ...

Возвращаемый тип как rvalue reference
Нашел интересный пример в книге Мейерса Эффективный и современный С++. class Widget { public: using DataType =...

что за возвращаемый тип, и как работает функция?
pair&lt;string, string&gt; splitExpression(string expr) { stringstream ss; ss &lt;&lt; expr; pair&lt;string, string&gt; result; getline(ss,...

Возвращаемый тип шаблона через std::common_type
Вот отрывок моего кода. Не могу понять как определить возвращаемый тип объекта matrix. template&lt;typename V, typename U, size_t R,...

Возвращаемый тип конструктора копирования в абстрактном классе
Здравствуйте! Есть абстрактный класс (с &quot;чистыми&quot; виртуальными функциями), и в нем необходимо явно определить конструктор копирования....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод Сайт называется reddit: The Thinkpad X220 Tablet is the best budget school laptop period. Это. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru