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

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

Восстановить пароль Регистрация
 
wrone
8 / 8 / 2
Регистрация: 19.12.2013
Сообщений: 87
06.09.2014, 02:08     Class, динамическая память, работа с данными #1
Создать программу которая сможет сохранять неизвестное количество имен и возрастов. Считывает имя и сохраняет в отдельный массив или вектор. Считывает возраст и сохраняет в отдельный массив или вектор.

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

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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2014, 02:08     Class, динамическая память, работа с данными
Посмотрите здесь:

C++ Динамическая память
C++ Динамическая память
Динамическая память C++
C++ Динамическая память [new]
Работа с class ами. Заполнение дин. массива типа class C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
КОП
348 / 280 / 86
Регистрация: 15.08.2010
Сообщений: 755
06.09.2014, 02:32     Class, динамическая память, работа с данными #2
wrone, нельзя в описании класса присваивать значения переменным. Есть конструктор, там все и делайте. Конструктор - как функция, вызывается при создании объекта. объявляется в паблике как Person() {//code}
wrone
8 / 8 / 2
Регистрация: 19.12.2013
Сообщений: 87
06.09.2014, 02:38  [ТС]     Class, динамическая память, работа с данными #3
КОП, К сожалению я ничего не понял из выше написанного, программирую не так давно. Вас не затруднит написать фрагмент кода/псевдокода, как правильно присваивать значения переменным?
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
06.09.2014, 02:58     Class, динамическая память, работа с данными #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. А потом вернуться к этим деталям, когда поднаберешься опыта и уверенности.
Yandex
Объявления
06.09.2014, 02:58     Class, динамическая память, работа с данными
Ответ Создать тему
Опции темы

Текущее время: 15:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru