Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
#1

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

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

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

Например, если эта переменная == 1, то вернуть A, если 2 то вернуть B
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2012, 20:01     Функции, возвращаемый тип
Посмотрите здесь:

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

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LEQADA
Мастер кустарных методов
227 / 222 / 9
Регистрация: 09.11.2010
Сообщений: 680
24.06.2012, 20:03     Функции, возвращаемый тип #2
Прочитайте о структурах.
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
24.06.2012, 21:03  [ТС]     Функции, возвращаемый тип #3
LEQADA, ваш ответ ровным счетом ничего не дал

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

Насчет union сейчас посмотрю
g-h
67 / 67 / 1
Регистрация: 03.06.2012
Сообщений: 176
24.06.2012, 21:53     Функции, возвращаемый тип #6
А если шаблоны функций использовать?
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
24.06.2012, 21:55     Функции, возвращаемый тип #7
шаблоны тебе в помощь)
RGentum
1 / 1 / 0
Регистрация: 24.06.2012
Сообщений: 49
24.06.2012, 21:58     Функции, возвращаемый тип #8
что значит
Цитата Сообщение от Ksan Посмотреть сообщение
в классе и так хранится void*
?

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

Добавлено через 1 минуту
Цитата Сообщение от g-h Посмотреть сообщение
А если шаблоны функций использовать?
а причем тут шаблоны функций?
g-h
67 / 67 / 1
Регистрация: 03.06.2012
Сообщений: 176
24.06.2012, 22:04     Функции, возвращаемый тип #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от 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
}
Avazart
Эксперт С++
7121 / 5298 / 273
Регистрация: 10.12.2010
Сообщений: 23,436
Записей в блоге: 17
24.06.2012, 22:11     Функции, возвращаемый тип #10
Пример:
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;
}
//---------------------------------------------------------------------------
Вывод:
Код
Текущая кодовая страница: 1251
13.3
строкаAстрокаB
Для продолжения нажмите любую клавишу . . .
RGentum
1 / 1 / 0
Регистрация: 24.06.2012
Сообщений: 49
24.06.2012, 22:29     Функции, возвращаемый тип #11
g-h, В таком случае, использование таких шаблонов имеет очень узкое применение. Только в случаях с одним и тем же набором действий в функции для разных типов, а также при правильном определении операторов, в данном случае "+". То есть это применимо, но далеко не всегда... Потому и интересно было узнать о конкретной задаче.
Видимо в данном вопросе это не подходит.
Avazart
Эксперт С++
7121 / 5298 / 273
Регистрация: 10.12.2010
Сообщений: 23,436
Записей в блоге: 17
24.06.2012, 23:11     Функции, возвращаемый тип #12
Ну а перегрузка/специализация для чего?
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;
}
//---------------------------------------------------------------------------
Код
Текущая кодовая страница: 1251
13.3
3
Для продолжения нажмите любую клавишу . . .
RGentum
1 / 1 / 0
Регистрация: 24.06.2012
Сообщений: 49
24.06.2012, 23:19     Функции, возвращаемый тип #13
Цитата Сообщение от Avazart Посмотреть сообщение
Ну а перегрузка/специализация для чего?
Вот именно. Перегрузка, специализация... А сколько теперь на это кода уйдет? А сколько лишних извратов? Легче однозначно union сделать, либо возвращать указатель на void.
Avazart
Эксперт С++
7121 / 5298 / 273
Регистрация: 10.12.2010
Сообщений: 23,436
Записей в блоге: 17
24.06.2012, 23:22     Функции, возвращаемый тип #14
Ну приведите пример кода с union... а то так я как то плохо понимаю о чем вы...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2012, 23:36     Функции, возвращаемый тип
Еще ссылки по теме:

В наследнике(-ах) требуется изменить возвращаемый тип этих функций. - C++
Есть базовый класс. Есть наследник базового класса. В базовом классе есть два виртуальных метода - Get(int id) и Set(int id). В...

Для чего нужен возвращаемый тип в перегрузке ввода >> и почему без него него выдаётся ошибка? - C++
Для чего нужен возвращаемый тип в перегрузке ввода &gt;&gt;, какую роль он выполняет что без него него выдаётся ошибка. cin объект istream...

Возвращаемый объект разрушается - C++
Написал класс &quot;безопасный массив&quot; и написал метод: const classname&amp; add(int, double) const {classname tmp(*this) *Пропустим return tmp;}...

Ссылка на объект, возвращаемый функцией - C++
Безопасно ли подобное? typedef std::vector&lt; string &gt; vec; vec someFoo(); vec someBoo() { // что-то делаем vec &amp; x =...

Возвращаемый массив содержит мусор - C++
Здравствуйте. У меня есть функция, которая должна возвращать массив, содержащий некоторые ячейки посланного массива. В функции создается...


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

Или воспользуйтесь поиском по форуму:
RGentum
1 / 1 / 0
Регистрация: 24.06.2012
Сообщений: 49
24.06.2012, 23:36     Функции, возвращаемый тип #15
Я надеюсь, что автор всё же объяснит точнее задачу и в каком виде должна вестись работа с типами...

Добавлено через 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 минут
А вот информация с родного сайта
Yandex
Объявления
24.06.2012, 23:36     Функции, возвращаемый тип
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru