Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

12.12.2013, 22:59. Просмотров 498. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2013, 22:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция, возвращающая указатель (C++):

Функция, возвращающая указатель - C++
Добрый вечер. Требуется написать программу, содержащую структуру вида type1 *имя(type2); т.е. функцию, которая принимает аргумент типа...

Функция, возвращающая указатель - C++
Нужно написать функцию, входящие параметры которой являются указателем на структуру. Заполнить в функции структуру (не важно). Возвратить...

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

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

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

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

12
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.12.2013, 23:12 #2
Можно.
1
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()’|
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.12.2013, 23:32 #4
У вас же массив не указателей. Что вы в массив пытаетесь указатель поместить?
C++
1
*(db + i) = *get_item();
Только утечка памяти будет. Сначала сохраните указатель, потом поместите содержимое по указателю в массив, потом освободите память под указателем.
1
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;
}
0
alsav22
5426 / 4821 / 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;
}
0
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
13.12.2013, 00:06  [ТС] #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Только утечка памяти будет.
Простите, а где же там будет утечка? Вот где может быть утечка в функции, кажется, понимаю. А вот в вызывающей ф-ии - не пойму.
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.12.2013, 00:11 #8
Цитата Сообщение от andrejap Посмотреть сообщение
Простите, а где же там будет утечка?
Там - это где?
Цитата Сообщение от alsav22 Посмотреть сообщение
Только утечка памяти будет.
Я разве указал место? Утечка памяти будет в коде из первого поста.
0
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
13.12.2013, 00:16  [ТС] #9
То есть, если не гнаться за рационализмом, то и мой исправленный вариант прокатывает (где есть return &item_copy)?
0
alsav22
5426 / 4821 / 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: возвращение адреса локальной или временной переменной
0
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
13.12.2013, 00:38  [ТС] #11
Получается, функция get_item выделяет память, значение в этих ячейках затем идет в цикл. Но при новых "циркуляциях" цикла, эти ячейки остаются заняты значениями, а доступ к ним теряется. Да?
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.12.2013, 00:46 #12
В общем и целом, да.
1
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
13.12.2013, 00:47  [ТС] #13
Мерси.
0
13.12.2013, 00:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2013, 00:47
Привет! Вот еще темы с ответами:

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

Функция, возвращающая указатель на двумерный массив - C++
Добрый день! Столкнулся с конструкцией которую раньше не видел, и не до конца понимаю что это и как работает: #include &lt;stdio.h&gt; ...

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

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