8 / 8 / 2
Регистрация: 19.12.2013
Сообщений: 87
1

Class, динамическая память, работа с данными

06.09.2014, 02:08. Показов 458. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Создать программу которая сможет сохранять неизвестное количество имен и возрастов. Считывает имя и сохраняет в отдельный массив или вектор. Считывает возраст и сохраняет в отдельный массив или вектор.

Ниже рабочий код и все с ним нормально, скинул сюда если не понято задание. Еще ниже будет не рабочий код, в нём то и проблема.

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
#include <iostream>
#include <string>
 
using namespace std;
 
 
int main(){
  
    int stop = 0;
    int n = 1;  
    string vards;
    string *vardi = new string[n];
    string *tmpvardi;
    int skaits = 0;
    
    int vecums;
    int *vecumi = new int[n];
    int *tmpvecumi;
 
// vards    
    while(true)
    {     
        cout << "\n Ievadi vardu: ";      // vvedi imja
     cin >> vards;
     
      cout << "\n Ievadi vecumu: ";   // vvedi vozrast
      cin >> vecums;
      
      
      // esli n == i  to nado uvili4itj pamjatj
          if(skaits == n)
          {
        tmpvardi = new string[n * 2];
        tmpvecumi = new int[n * 2];
        
            for(int j = 0; j < skaits; j++)
            {
            tmpvardi[j] = vardi[j];
            tmpvecumi[j] = vecumi[j];
            }
            
        delete[] vardi;
        delete[] vecumi;
        
        vardi = tmpvardi;
        vecumi = tmpvecumi;
        
         tmpvardi = 0;
         tmpvecumi = 0;
         
          n = n * 2;
          } 
        
      vardi[skaits] = vards;
      vecumi[skaits] = vecums;
      skaits++;    
     
      cout << "\n     Apturet? (1/0) = ";    // ostanovitj?
      cin >> stop;
        if(stop == 1)
        {
        cout << "\n  ...stopped" << endl;
        break;
        }
     
       
    }
     
          cout << endl;
          for(int j = 0; j < skaits; j++)
      {
          cout << "      " <<  vardi[j] << " - " << vecumi[j] << endl;
      }
          cout << endl;
 
return 0;
}
А теперь надо сделать тоже самое, но с классом который будет сохранять и выводить данные. Я попытался сделать, но он указывает на ошибку. Подскажите что не так.


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
#include <iostream>
 
using namespace std;
 
    class Person
    {
    public:
 
        string name;
        int age;
 
         int n = 1;                               // oshibka ukazivaet na eti strochki
         int counter = 0;                                  // ******
           string *names = new string[n];           // ******
            string *tempNames[n];                      // *******
 
           int *ages = new int[n];
            int *tempAges[n];
 
 
        void information(string name, int age)
        {
            names[counter] = name;
            ages[counter] = age;
            counter++;
        }
 
        void output(string names[], int ages[])
        {
             int j = 0;
             while(j < counter)
             {
                   cout << endl << "Name: " << names[j];
                   cout << endl << "Age: " << ages[j] << endl;
                   j++;
             }
        }
 
    };
 
int main(){
 
 
    Person persona;
    int stop = 2;
 
       while(true)
       {
        cout << "Ievadi vardu: ";         //vvedi imja
         cin >> persona.name;              
        cout << "Ievadi vecumu: ";      //vvedi vozrast
         cin >> persona.age;
 
         persona.information(persona.name,persona.age);
        cout << "Apturet? (1/0): ";            // ostanovitj?
         cin >> stop;
        cout << endl;
 
 
 
            if(stop == 1)
            {
               break;
            }
       }
 
            persona.output(persona.names, persona.ages);
 
 
return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.09.2014, 02:08
Ответы с готовыми решениями:

Статическая память,Динамическая память.
a) Статическая память. Двумерный массив. Дан массив целых чисел. В массиве есть отрицательные...

Работа с class ами. Заполнение дин. массива типа class
Всем доброго времени суток! Это моя первая тема на этом сайте, поэтому если что извините меня (за...

Динамическая память с++
Как использовать динамическую память в с++

Динамическая память.
Всем привет! Уважаемые знатоки, можете посмотреть мою реализацию класса вектор? У меня при их...

3
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
06.09.2014, 02:32 2
wrone, нельзя в описании класса присваивать значения переменным. Есть конструктор, там все и делайте. Конструктор - как функция, вызывается при создании объекта. объявляется в паблике как Person() {//code}
0
8 / 8 / 2
Регистрация: 19.12.2013
Сообщений: 87
06.09.2014, 02:38  [ТС] 3
КОП, К сожалению я ничего не понял из выше написанного, программирую не так давно. Вас не затруднит написать фрагмент кода/псевдокода, как правильно присваивать значения переменным?
0
18829 / 9832 / 2403
Регистрация: 30.01.2014
Сообщений: 17,267
06.09.2014, 02:58 4
Цитата Сообщение от КОП Посмотреть сообщение
нельзя в описании класса присваивать значения переменным.
На самом деле уже можно (с С++11).

wrone, но на самом деле конструктор написать все равно лучше.
Пример:
C++
1
2
3
4
5
6
7
8
9
class Person
{
public:
    Person() 
       : n(1), counter(0)
       , names(new string[n])
       , ages(new int[n])
    {}
};
Добавлено через 1 минуту
wrone, еще лучше вместо ручного распределения памяти использовать какой-нибудь vector. А потом вернуться к этим деталям, когда поднаберешься опыта и уверенности.
0
06.09.2014, 02:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.09.2014, 02:58
Помогаю со студенческими работами здесь

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

Динамическая память C++
Народ, подскажите, плиз, что я делаю не так? Надо посимвольно ститать строку, в процессе выделяя...

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

Динамическая память
Кто сможет помочь? Дана матрица А. Упорядочить элементы каждой строки в порядке не убывания....


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru