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

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

Войти
Регистрация
Восстановить пароль
 
InSpectr
10 / 10 / 1
Регистрация: 09.09.2013
Сообщений: 53
#1

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

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

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

Функции двумерного массива. Транспонировать матрицу через ввод вывод функции двумерного массива. - C++
Транспонировать матрицу через ввод вывод функции двумерного массива.Сначала вывести ее,а потом провести транспонирование.

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

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

Как присвоить второму элементу массива в функции A(), значение, которое было возвращено из функции B()? - C++
Как присвоить к второму элементу массива в функции innfunc значение 10, который вернет innfunc1? Замечание: нельзя указывать b = 10, а...

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

9
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3142 / 307
Регистрация: 04.12.2011
Сообщений: 8,673
Записей в блоге: 5
05.10.2013, 23:17 #2
InSpectr, если BDAY объявлен в private секции, то возвращать его Вы не собирались?
Нужно сразу решить надо оно или нет. Присвоить его Вы можете но для возврата можно перегрузить оператор [] или написать функцию (public) int get(int ind), где предусмотреть проверку границ индексации, правильности значений и тп.
Вернуть массив из свободной функции можно по-разному. В Вашем случае например, создается динамический массив и значит нужно вернуть указатель и размер. Размер можно по ссылке вернуть. То есть в число параметров должно войти что-то вроде int &arr_size, а указатель может быть как параметром так и возвращаемым значением.
1
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
05.10.2013, 23:25 #3
не выпендривайся, а создай структуру и туда лепи твои данные. зачем городить массив, если там всегда три элемента? чтоб потом думать, а что же я там имел ввиду?

Добавлено через 1 минуту
да, в конструкторе вызывать сэттеры - перебор.
2
InSpectr
10 / 10 / 1
Регистрация: 09.09.2013
Сообщений: 53
05.10.2013, 23:28  [ТС] #4
задание сделать класс...
1
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3142 / 307
Регистрация: 04.12.2011
Сообщений: 8,673
Записей в блоге: 5
05.10.2013, 23:28 #5
Цитата Сообщение от novi4ok Посмотреть сообщение
не выпендривайся, а создай структуру и туда лепи твои данные. зачем городить массив, если там всегда три элемента? чтоб потом думать, а что же я там имел ввиду?
Можно. Но доступ же нужен. А конструктор имеет доступ и без сеттеров если инициализацию иметь ввиду.
1
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
06.10.2013, 01:27 #6
Цитата Сообщение от 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
Комп_Оратор)
Эксперт по математике/физике
6503 / 3142 / 307
Регистрация: 04.12.2011
Сообщений: 8,673
Записей в блоге: 5
06.10.2013, 02:18 #7
Цитата Сообщение от 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  [ТС] #8
Да массив для хранения дня рождения.
Спасибо всем, сейчас буду думать.
1
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3142 / 307
Регистрация: 04.12.2011
Сообщений: 8,673
Записей в блоге: 5
07.10.2013, 00:25 #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
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
XRuZzz
Антикодер
687 / 593 / 29
Регистрация: 15.09.2012
Сообщений: 2,541
07.10.2013, 00:33 #10
Страуструп поэтому и рекомендует использовать vector вместо массивов(всмысле потому, что с ними можно удобнее работать, в том числе и возвращать вектор из метода)
0
07.10.2013, 00:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2013, 00:33
Привет! Вот еще темы с ответами:

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

Сразу три 1.анализ функции, 2.замена элементов массива, 3.максимальный элемент массива - C++
1. Протабулировать заданную функцию y = f(x) на промежутке с постоянным шагом h. интервал =; шаг h=0.1; система уравнений (х-1)^4 и...

Открытые функции класса: ввод массива, вывод массива, определение длины вектора - C++
Данные класса: массив N(10). Открытые функции класса: ввод массива, вывод массива, определение длины вектора. Длина массива определяется...

Удалить из массива A[N] вс отрицательные элементы.Удаление отрицательных элементов массива оформить в виде функции - C++
Что исправить? #include &lt;stdio.h&gt; #define N 10 int udalenie(int A,int k ) { int i; for(i=k;i&lt;N;i++)


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

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

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