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

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

Войти
Регистрация
Восстановить пароль
 
wrone
8 / 8 / 2
Регистрация: 19.12.2013
Сообщений: 87
#1

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

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

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

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

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

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

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

Динамическая память - C++
Как создать массив A через динамическую память ???

Динамическая память [new] - C++
Если записать так: char *p; p = new char; cin&gt;&gt;p; for(int i=0; i&lt;strlen(p); i++) cout&lt;&lt;p&lt;&lt;endl;

Динамическая память - C++
Всем привет!!! взникла проблема с выполнением строки K=A++; при выполнении printf(&quot;\n__________ %d\n&quot;,K.gasaaa()); получаю левые...

Динамическая память - C++
Есть 2 массива одной размерности: int *m1 = new int , *m2 = new int ; где N, M некие числа. Собственно вопрос: как...

3
КОП
361 / 280 / 86
Регистрация: 15.08.2010
Сообщений: 762
06.09.2014, 02:32 #2
wrone, нельзя в описании класса присваивать значения переменным. Есть конструктор, там все и делайте. Конструктор - как функция, вызывается при создании объекта. объявляется в паблике как Person() {//code}
0
wrone
8 / 8 / 2
Регистрация: 19.12.2013
Сообщений: 87
06.09.2014, 02:38  [ТС] #3
КОП, К сожалению я ничего не понял из выше написанного, программирую не так давно. Вас не затруднит написать фрагмент кода/псевдокода, как правильно присваивать значения переменным?
0
DrOffset
7376 / 4453 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2014, 02:58
Привет! Вот еще темы с ответами:

Динамическая память - C++
в чем ошибка #include &lt;iostream&gt; #include &quot;conio.h&quot; using namespace std; class{A int a; double b; char s; }

Динамическая память - C++
Создать одномерный массив в котором хранятся года рождения людей (года вводятся в массив в ручную, размер массива не менее 5). Определить...

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

Динамическая память - C++
Каким способом можно задать динамическую память , кроме как через new ?


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

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

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