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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
Alexpm
3 / 3 / 0
Регистрация: 06.09.2011
Сообщений: 47
#1

Динамический массив (классов) - C++

14.02.2012, 11:09. Просмотров 1542. Ответов 5
Метки нет (Все метки)

Вот такой вопрос, почему так?

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
#include <iostream>
#include <string>
using namespace std;
 
class primer
{
public:
    primer (int _number, char _s1[])
    {
        number=_number;
        strcpy(s1, _s1);
    }
    primer()
    {
    }
    primer input(int number)
    {
        char s1[10];
        cout<<"Пример:"<<" ";
        cin.sync();
        cin.getline(s1, sizeof(s1), '\n');
        cin.sync();
        primer tmp(number, s1);
        return tmp;
    }
    void output()
    {
        cout<<number<<" "<<s1<<endl;
    }
    private:
    int number;
    char s1[10];
};
 
int dobavl(primer *mass, int n)
{
    cout<<"Сколько?"<<" "; cin>>n;
    mass=(primer*) realloc (mass, (n*sizeof(primer)));  
    for (int i=0, number=1; i<n; i++, number++)
    {
        mass[i]=mass[i].input(number);
    }
        for (int i=0; i<n; i++)
    {
        mass[i].output();
    }
    return n;
};
 
void main()
{
    setlocale(LC_ALL,"Russian");
    primer *mass=(primer*) malloc(sizeof(primer));
    int n=0;
    n=dobavl(mass, n);
}
[IMG]http://s017.***********/i411/1202/ee/9772e65b3338t.jpg[/IMG]
==============================================================
А если вывод на экран делать из отдельной функции:
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
#include <iostream>
#include <string>
using namespace std;
 
class primer
{
public:
    primer (int _number, char _s1[])
    {
        number=_number;
        strcpy(s1, _s1);
    }
    primer()
    {
    }
    primer input(int number)
    {
        char s1[10];
        cout<<"Пример:"<<" ";
        cin.sync();
        cin.getline(s1, sizeof(s1), '\n');
        cin.sync();
        primer tmp(number, s1);
        return tmp;
    }
    void output()
    {
        cout<<number<<" "<<s1<<endl;
    }
    private:
    int number;
    char s1[10];
};
 
int dobavl(primer *mass, int n)
{
    cout<<"Сколько?"<<" "; cin>>n;
    mass=(primer*) realloc (mass, (n*sizeof(primer)));  
    for (int i=0, number=1; i<n; i++, number++)
    {
        mass[i]=mass[i].input(number);
    }
    return n;
};
 
void vivod(primer mass[], int n)
{   
    for (int i=0; i<n; i++)
    {
        mass[i].output();
    }
};
 
void main()
{
    setlocale(LC_ALL,"Russian");
    primer *mass=(primer*) malloc(sizeof(primer));
    int n=0;
    n=dobavl(mass, n);
    vivod(mass, n);
}
То так:
[IMG]http://s018.***********/i519/1202/bd/180d47cabe98t.jpg[/IMG]

Как сделать правильно, чтоб работало во втором случае?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2012, 11:09     Динамический массив (классов)
Посмотрите здесь:

Динамический массив классов - C++
Добрый день. Прошу помощи, совета или т.п. Есть класс, который содержит динамический массив на тип double. Вот часть класса: ...

Динамический массив - C++
Всем привет. Помогите пожалуйста решить проблему с динамическим массивом. Есть динамический массив структур, в него нужно добавлять...

Динамический массив - C++
Усорвие: Переделать программу, используя в качестве контейнера для хранения данных динамические массивы. Для обработки данных...

Динамический массив - C++
Надо: Сформировать массив строк, добавить в него строку с заданным номером. Не знаю,как добавить в него строку с заданным номером. ...

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

Динамический массив - C++
помогите с задачей..я не понял её))мне на контрольную её задали..КАКОЕ ЧИСЛО ВСТРЕТИТСЯ В МАССИВЕ РАНЬШЕ МАКСИМАЛЬНОЕ ИЛИ МИНИМАЛЬНОЕ?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,911
14.02.2012, 11:40     Динамический массив (классов) #2
Нельзя применять функции языка С для работы с памятью к классам, используйте std::vector.

Добавлено через 6 минут
C++
1
int dobavl(primer *mass, int n)
здесь у вас в любом случае ошибка. Вы передаёте в функцию копию указателя, и в дальнейшем работаете именно с копией. которая никак не связана с переменной mass из функции main. Правильный вариант
C++
1
int dobavl(primer *&mass, int n)
либо
C++
1
int dobavl(primer **mass, int n)
Alexpm
3 / 3 / 0
Регистрация: 06.09.2011
Сообщений: 47
14.02.2012, 11:40  [ТС]     Динамический массив (классов) #3
Я не проходил еще векторы
Если нельзя, значит задача отпадает.
Спасибо.

C++
1
int dobavl(primer *&mass, int n)
мм, а вот так всё работает)) тогда так сделаю..
еще раз спасибо..
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,911
14.02.2012, 12:55     Динамический массив (классов) #4
Цитата Сообщение от Alexpm Посмотреть сообщение
Я не проходил еще векторы
std::vector это расширяемый динамический массив. Если вам необходимо работать с памятью в ручную, используйте операторы new и delete, вместо malloc и free(функцию перераcпределения памяти(realloc) придётся писать самостоятельно).
Alexpm
3 / 3 / 0
Регистрация: 06.09.2011
Сообщений: 47
14.02.2012, 13:12  [ТС]     Динамический массив (классов) #5
Цитата Сообщение от rangerx Посмотреть сообщение
std::vector это расширяемый динамический массив. Если вам необходимо работать с памятью в ручную, используйте операторы new и delete, вместо malloc и free(функцию перераcпределения памяти(realloc) придётся писать самостоятельно).
Дак ведь malloc и relloc работают, ошибка была при передачи массива в функцию. Я понимаю, что использование их не лучший вариант, но пока что знаний не особо хватает для использования чего то другого...

New и delete у меня тоже используется. Вот возник вопрос по ним, как использовать правильно delete? Точно также как и с массивом типа int к примеру delete[] mass?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2012, 13:37     Динамический массив (классов)
Еще ссылки по теме:

Динамический массив - C++
Здравствуйте, помогите пожалуйста сделать динамическую треугольную матрицу размером 10X10. Вот мой код, проблема в том, что он ее просто...

Динамический массив - C++
есть примерно такая функция: int *funktion (int size){ int *g = new int ; ... //функция работы с дин. массивом

Динамический массив - C++
Помогите пожалуйста написать программу!!! Нужно для будущих авиаторов, не дайте умереть авиации)))) Написать программу, вводя размер...

Динамический массив - C++
Добрый день, помогите пожалуйста с задачей. Поменять местами строки матрицы с номерами i и j

Динамический массив - C++
Задание такое: Должно быть реализовано 2 способа заполнения массива: ручное (элементы массива вводит сам пользователь) и автоматическое...

Динамический массив. - C++
Есть такой момент в программе: ... char *r; int a,b,c,dl_len; ... printf(&quot;a= &quot;); scanf(&quot;%d&quot;,&amp;a); printf(&quot;b= &quot;); ...


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

Или воспользуйтесь поиском по форуму:
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,911
14.02.2012, 13:37     Динамический массив (классов) #6
Цитата Сообщение от Alexpm Посмотреть сообщение
Дак ведь malloc и relloc работают, ошибка была при передачи массива в функцию. Я понимаю, что использование их не лучший вариант, но пока что знаний не особо хватает для использования чего то другого...
Только что ответил здесь(чтобы не повторяться)
Цитата Сообщение от Alexpm Посмотреть сообщение
Вот возник вопрос по ним, как использовать правильно delete? Точно также как и с массивом типа int к примеру delete[] mass?
Да.
Yandex
Объявления
14.02.2012, 13:37     Динамический массив (классов)
Ответ Создать тему
Опции темы

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