Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
 Аватар для InSpectr
10 / 10 / 1
Регистрация: 09.09.2013
Сообщений: 53

Возрат массива из функции

05.10.2013, 23:01. Показов 659. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. Подскажите пожалуйста как вернуть массив
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include "stdafx.h"
#include <iostream>
#include <string>
#include <cstdlib>
#include <Windows.h>
using namespace std;
 
 
class NOTEC
{
    public:
        NOTEC()
        {
            NAME="Perev Dima";
            TELE=8919799;
            BDAY[1]=7;
            BDAY[2]=1;
            BDAY[3]=19;
        }
        NOTEC(string a, long long int b, int c[])
        {
             set_nam(a);
             set_tel(b);
             set_bda(c);
        }
        void set_nam(string a)
        {
            NAME=a;
        }
 
        void set_tel(long long int b)
        {
            TELE=b;
        }
 
        void set_bda(int c[])
        {
            for( int i=0;i<3;i++)
                BDAY[i]=c[i];
        }
        string get_nam()
        {
            return NAME;
        }
        long long int get_tel()
        {
            return TELE;
        }
 
        int get_bday()
        {   
            //как здесь вернуть массив?
            return BDAY;
        }
 
 
 
 
    private:
        string NAME;
        long long int TELE;
        int BDAY[3];
 
};
 
 
 
 
 
int main()
{
    string a;
    long long int b;
    int c[3];
    
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout<<"Сколько сотрудников: ";
    NOTEC *BLOCKNOTE= new NOTEC [2];
 
    
    cout<<"Введите Имя, Телефон, Дату рождения\n";
    for(int i=0;i<2;i++)
    { 
        getline(cin, a);
        cin >>b;
        for(int q=0;q<3;q++)
            cin>>c[q];
        BLOCKNOTE[i].set_nam(a);
        BLOCKNOTE[i].set_tel(b);
        BLOCKNOTE[i].set_bda(c);
 
        cin.get(); 
    }
    for(int j=0;j<2;j++)
    {
        cout<<BLOCKNOTE[j].get_nam()<<" "<<BLOCKNOTE[j].get_tel()<<" ";
    // а тут его вывести?
    }
    
 
    return 0;
}
как вот тут вернуть(в конце класса)
C++
1
2
3
4
5
int get_bday()
        {   
            
            return BDAY;
        }
а тут его вывести
C++
1
2
3
4
5
for(int j=0;j<2;j++)
    {
        cout<<BLOCKNOTE[j].get_nam()<<" "<<BLOCKNOTE[j].get_tel()<<" ";
            //тут
    }
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.10.2013, 23:01
Ответы с готовыми решениями:

Возрат объекта из функции
#include &lt;iostream&gt; using namespace std; class A { public: A() { cout&lt;&lt;&quot;constr.\n&quot;; } A(const A&amp;...

Возрат из подпрограммы
Как правильно выходить из под программы, которая вызывается в обработчике прерывания, у меня получается что выходит полностью из прерывания...

Возрат строки из JavaScript
Web = new ChromeDriver(); Web.Manage().Window.Maximize(); Web.Navigate().GoToUrl(&quot;http://site.com/&quot;); ...

9
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
05.10.2013, 23:17
InSpectr, если BDAY объявлен в private секции, то возвращать его Вы не собирались?
Нужно сразу решить надо оно или нет. Присвоить его Вы можете но для возврата можно перегрузить оператор [] или написать функцию (public) int get(int ind), где предусмотреть проверку границ индексации, правильности значений и тп.
Вернуть массив из свободной функции можно по-разному. В Вашем случае например, создается динамический массив и значит нужно вернуть указатель и размер. Размер можно по ссылке вернуть. То есть в число параметров должно войти что-то вроде int &arr_size, а указатель может быть как параметром так и возвращаемым значением.
1
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
05.10.2013, 23:25
не выпендривайся, а создай структуру и туда лепи твои данные. зачем городить массив, если там всегда три элемента? чтоб потом думать, а что же я там имел ввиду?

Добавлено через 1 минуту
да, в конструкторе вызывать сэттеры - перебор.
2
 Аватар для InSpectr
10 / 10 / 1
Регистрация: 09.09.2013
Сообщений: 53
05.10.2013, 23:28  [ТС]
задание сделать класс...
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
05.10.2013, 23:28
Цитата Сообщение от novi4ok Посмотреть сообщение
не выпендривайся, а создай структуру и туда лепи твои данные. зачем городить массив, если там всегда три элемента? чтоб потом думать, а что же я там имел ввиду?
Можно. Но доступ же нужен. А конструктор имеет доступ и без сеттеров если инициализацию иметь ввиду.
1
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
06.10.2013, 01:27
Цитата Сообщение от InSpectr Посмотреть сообщение
задание сделать класс...
это понятно. класс ты сделал, и как он "наружу выглядит" - нормально (почти). а как он внутри устроен - не годится. чем ближе твой дизайн к реально отображаемым вещам, тем проще и твой класс строить, и с ним работать. я так понял, ты хочешь использовать этот массив, чтобы хранить день рождения, или я недопонял?

Добавлено через 52 секунды
Цитата Сообщение от IGPIGP Посмотреть сообщение
Можно. Но доступ же нужен. А конструктор имеет доступ и без сеттеров если инициализацию иметь ввиду.
ничччьо не понял, звиняй

Добавлено через 10 минут
попробуй так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class NOTEC {
  public:
 
    typedef struct llist_tag {
      unsigned char _00_day;
      unsigned char _01_mon;
      unsigned short _02_year;
    } Bday;
    NOTEC();
    Bday getBday ();
...
  private:
    Bday m_Bday;
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
06.10.2013, 02:18
Цитата Сообщение от InSpectr Посмотреть сообщение
int get_bday() { //как здесь вернуть массив? return BDAY; }
Ну раз уж так... Напишите:
C++
1
2
3
void show_bday() {
cout << "Day : " <<  BDAY[0] << "Month : " << BDAY[1] << "Year : " <<  BDAY[2] << endl;
}
1
 Аватар для InSpectr
10 / 10 / 1
Регистрация: 09.09.2013
Сообщений: 53
06.10.2013, 12:25  [ТС]
Да массив для хранения дня рождения.
Спасибо всем, сейчас буду думать.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
07.10.2013, 00:25
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <iostream>
#include <string>
#include <cstdlib>
#include <Windows.h>
using namespace std;
 
class NOTEC
{
    public:
        NOTEC()
        {
            NAME="";
            TELE=-1;
            BDAY[0]=-1;
            BDAY[1]=-1;
            BDAY[2]=-1;
        }
        NOTEC(string a, long long int b, int c[])
        {
            NAME=a;
            TELE=b;
            BDAY[1]=c[0];
            BDAY[2]=c[1];
            BDAY[3]=c[2];
        }
        NOTEC(const NOTEC &orig)
        {
            if(this != &orig){
            NAME=orig.NAME;
            TELE=orig.TELE;
            BDAY[0]=orig.BDAY[0];
            BDAY[1]=orig.BDAY[1];
            BDAY[2]=orig.BDAY[2];
            }
        }
 
        void err_assert(string err) const {//можно решить и выбрасывать исключения но пока так...
cout << err<<"\n";
system("pause"); 
exit(1);
        }
 
        int operator[](int ind) const {
            if(ind > -1 && ind < 3)
            return BDAY[ind];
            else
err_assert("Аварийное завершение в  int operator[](int )\n выход за границы массива");
        }
 
        void set_nam(string a)
        {
            if(!a.empty())  NAME=a;
            else
err_assert("Аварийное завершение в  void set_nam(string )\n имя не может быть пустой строкой");
        }
 
        void set_tel(long long int b)
        {
           if(b>0) TELE=b;
           else{
err_assert("Аварийное завершение в  void set_tel(string )\n номер телефоне не может быть <0 ");
           }
        }
 
        void set_BDAY(int c[])
        {//хотя тут попробуем симитировать защищённый ввод иначе не было смысла
            //объявлять BDAY private
            //проверку на попытку ввести 29 февраля в не высокосный год и пр. 
            //оставляю Вам
            // я только сделаю примитивный шаблон
if(c[2]>0)BDAY[2]=c[2];//год сначала потому, что потом проверяете дату (по году)
else{
err_assert("Аварийное завершение в set_BDAY(int c[])\n год не может быть таким ");
           }    
if(c[1]>0 && c[1] < 13)BDAY[1]=c[1];//это где угодно можно, но пусть уж всё наоборот
else{
err_assert("Аварийное завершение в set_BDAY(int c[])\n месяц не может быть таким ");
           }
            if(c[0]>0 && c[0] < 31/*хоть так*/)BDAY[0]=c[0];//тут условие и логику можно усложнить с учетом сказанного)
else{
err_assert("Аварийное завершение в set_BDAY(int c[])\n день не может быть таким ");
           }      
        }
        string get_nam()
        {
            return NAME;
        }
        long long int get_tel()
        {
            return TELE;
        } 
 
    private:
        string NAME;
        long long int TELE;
        int BDAY[3];
 
};
 
int main()
{
    string a;
    long long int b;
    int c[3];
    
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int numb;
    cout<<"Сколько сотрудников: ";
    cin >> numb;
    NOTEC *BLOCKNOTE= new NOTEC [numb]; 
  
    cout<<"Введите Имя, Телефон, Дату рождения\n";
    for(int i=0;i<numb;i++)
    { 
        cout << "Имя : ";
        cin >> a;
        cout << endl;
        BLOCKNOTE[i].set_nam(a);
        
        cout << "Телефон : ";
        cin >>b;
        BLOCKNOTE[i].set_tel(b);
        cout << endl;
 
        cout << "Год рождения : ";
        cin >>c[2];
        cout << endl;
 
        cout << "Месяц года : ";
        cin >>c[1];
        cout << endl;
 
        cout << "День месяца : ";
        cin >>c[0];
        cout << endl;
 
        BLOCKNOTE[i].set_BDAY(c);
         
    }
    cout << "Введены такие люди:" << endl;
    cout << "Имя\tТелефон\tдень\tмесяц\tгод" << endl;
    for(int j=0;j<numb;j++)
    {
cout<<BLOCKNOTE[j].get_nam()<<"\t"<<BLOCKNOTE[j].get_tel()<<"\t"<<BLOCKNOTE[j][0]<<"\t"<<BLOCKNOTE[j][1]<<"\t"<<BLOCKNOTE[j][2]<<endl;
    // а тут его вывести?
    }
system("pause"); 
    return 0;
    }
До ума доведите сами.
0
Антикодер
Эксперт функциональных языков программирования
1888 / 870 / 48
Регистрация: 15.09.2012
Сообщений: 3,088
07.10.2013, 00:33
Страуструп поэтому и рекомендует использовать vector вместо массивов(всмысле потому, что с ними можно удобнее работать, в том числе и возвращать вектор из метода)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.10.2013, 00:33
Помогаю со студенческими работами здесь

Возрат double из dll
Возникла проблема при использовании функий из .dll. Я написал свою dll в которой имеются ф-ии с возвращаемым значением типа double,но когда...

Учёт и возрат значений в таблице
Приветствую всех, очень помощь, не особо шарю в Экселе ,поэтому нужна помощь, суть такова: Есть список техники вида: И/Н - модель -...

Возрат значения каждой третьей ячейки
Доброе утро! Подскажите пожалуйста, как должна выглядеть формула, при растягивании которой по горизонтали, возвращала бы значение...

Выравнивание по горизонтали и возрат в исходную точку
Добрый день. Вообщем работаю с несколькими объектами, при нажатии по любому из них он перемещается немного выше по оси y, при повторном...

Возрат значения при снятии галки CheckBox
Как сделать так чтобы при снятии галки возвращались значения до нее


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru