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

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

Войти
Регистрация
Восстановить пароль
 
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
#1

Функция, возвращающая указатель - C++

12.12.2013, 22:59. Просмотров 490. Ответов 12
Метки нет (Все метки)

Здравствуйте.
Пускай есть класс Some_type и массив такого класса. Можно ли функцией Some_type* some_name (some_type) заполнять массив, если ею возвращается указатель на объект созданный с помощью new?

И мой код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Pizza db[count];
 
  for (int i {}; i < count; ++i)
  {
    *(db+1) = get_item();
  }
 
Pizza* get_item();
{
    Pizza* item = new Pizza;
    cout << "\nEnter name of product:\n";
    cin.getline(item->name, arr_size);
    cout <<  "\nEnter name of manufacturer:\n";
    cin.getline(item->mnfc, arr_size);
    cout <<  "\nEnter size of pizza:\n";
    cin >> item->dmtr;
    cin.get();
    cout <<  "\nEnter mass of product:\n";
    cin >> item->mass;
    cin.get();
 
    return item;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2013, 22:59     Функция, возвращающая указатель
Посмотрите здесь:

Функция, возвращающая указатель на структуру - C++
Помогите пожалуйста понять в чем ошибка! Функция create должна возвращать указатель на структуру Vector #include &lt;iostream&gt; using...

Функция, возвращающая указатель на функцию - C++
Всем привет, Мне нужно создать функцию, которая будет возвращает указатель на функцию. Я создам массив указателей на функцию, присвою...

Функция возвращающая указатель на int - C++
Не могу понять ошибки. // prata 7 pt to function.cpp : Defines the entry point for the console application. // #include &quot;stdafx.h&quot;...

Функция, возвращающая указатель на структуру - C++
Ребят помогите пожалуйста,как создать функцию возвращающую указатель на структуру,в общем задание звучит так:написать библиотеку для...

Функция, возвращающая умный указатель - C++
Здравствуйте, помогите пожалуйста создать функцию, возвращающую умный указатель. Мой вариант не рабочий: class InterfaceVideo{ public:...

Структура и функция, возвращающая указатель на структуру - C++
Добрый вечер! В чем проявляется особенность функции, если мы даем ей тип от имени структуры? (или как правильно называется такое...

Рекурсивная функция, возвращающая указатель на объект - C++
Есть рекурсивная функция (заполняющая двоичное дерево) Node* fill(int i){ //Возвращаемое значение ????? Node node(lines.key);...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.12.2013, 23:12     Функция, возвращающая указатель #2
Можно.
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
12.12.2013, 23:16  [ТС]     Функция, возвращающая указатель #3
А почему тогда мне такую ошибку выдает?
error: no match for ‘operator=’ in ‘*(((Pizza*)(& db)) + 80u) = get_item()’|
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.12.2013, 23:32     Функция, возвращающая указатель #4
У вас же массив не указателей. Что вы в массив пытаетесь указатель поместить?
C++
1
*(db + i) = *get_item();
Только утечка памяти будет. Сначала сохраните указатель, потом поместите содержимое по указателю в массив, потом освободите память под указателем.
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
12.12.2013, 23:41  [ТС]     Функция, возвращающая указатель #5
Спасибо!
Вы имелли ввиду примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Pizza* get_item()
{
    Pizza* item = new Pizza;
    cout << "\nEnter name of product:\n";
    cin.getline(item->name, arr_size);
    cout <<  "\nEnter name of manufacturer:\n";
    cin.getline(item->mnfc, arr_size);
    cout <<  "\nEnter size of pizza:\n";
    cin >> item->dmtr;
    cin.get();
    cout <<  "\nEnter mass of product:\n";
    cin >> item->mass;
    cin.get();
    Pizza item_copy;
    item_copy = *item;
    delete item;
    return &item_copy;
}
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.12.2013, 23:50     Функция, возвращающая указатель #6
Цитата Сообщение от andrejap Посмотреть сообщение
Вы имелли ввиду примерно так:
Нет, я имел ввиду так (get_item() из первого поста):
C++
1
2
3
4
5
6
for (int i = 0; i < count; ++i)
{
    Piza* p = get_item();
    *(db + i) = *p;
    delete p;
}
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
13.12.2013, 00:06  [ТС]     Функция, возвращающая указатель #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Только утечка памяти будет.
Простите, а где же там будет утечка? Вот где может быть утечка в функции, кажется, понимаю. А вот в вызывающей ф-ии - не пойму.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.12.2013, 00:11     Функция, возвращающая указатель #8
Цитата Сообщение от andrejap Посмотреть сообщение
Простите, а где же там будет утечка?
Там - это где?
Цитата Сообщение от alsav22 Посмотреть сообщение
Только утечка памяти будет.
Я разве указал место? Утечка памяти будет в коде из первого поста.
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
13.12.2013, 00:16  [ТС]     Функция, возвращающая указатель #9
То есть, если не гнаться за рационализмом, то и мой исправленный вариант прокатывает (где есть return &item_copy)?
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.12.2013, 00:25     Функция, возвращающая указатель #10
Утечка памяти - это когда теряется возможность доступа к динамически выделенной памяти. А теперь скажите: в каком месте вашего кода (из первого поста) теряется такой доступ?

Добавлено через 7 минут
Цитата Сообщение от andrejap Посмотреть сообщение
То есть, если не гнаться за рационализмом, то и мой исправленный вариант прокатывает (где есть return &item_copy)?
Если очень сильно не гнаться...
Цитата Сообщение от andrejap Посмотреть сообщение
где есть return &item_copy
Лучше так не делать, компилятор пишет:
C++
1
warning C4172: возвращение адреса локальной или временной переменной
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
13.12.2013, 00:38  [ТС]     Функция, возвращающая указатель #11
Получается, функция get_item выделяет память, значение в этих ячейках затем идет в цикл. Но при новых "циркуляциях" цикла, эти ячейки остаются заняты значениями, а доступ к ним теряется. Да?
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.12.2013, 00:46     Функция, возвращающая указатель #12
В общем и целом, да.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2013, 00:47     Функция, возвращающая указатель
Еще ссылки по теме:

Функция, возвращающая значение - C++
сам не могу осилить

Функция, возвращающая массив - C++
Задача: В двумерном целочисленом массиве заданного размера найти номера строк, элементы которых образуют убявающую последовательность. ...

Функция, возвращающая массив - C++
Нужно вернуть из функции массив. int F(int a,int* b) { for(int i=0;i&lt;a;i++) *b++; for(int i=0;i&lt;3;i++) printf(&quot;%d\n&quot;, b); ...

Функция возвращающая ссылку - C++
Так делать не правильно, но попытался написать код: int&amp; func(int &amp;x) { return &amp;x; } В чем ошибка?

Функция возвращающая массив - C++
#include &lt;iostream&gt; #include &quot;conio.h&quot; int *convertToBin() { int a = { 1, 2, 3, 4, 5}; return a; } int...


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

Или воспользуйтесь поиском по форуму:
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
13.12.2013, 00:47  [ТС]     Функция, возвращающая указатель #13
Мерси.
Yandex
Объявления
13.12.2013, 00:47     Функция, возвращающая указатель
Ответ Создать тему
Опции темы

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