Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/170: Рейтинг темы: голосов - 170, средняя оценка - 4.58
1 / 1 / 1
Регистрация: 28.02.2012
Сообщений: 20
1

Динамическое создание объекта класса

29.02.2012, 15:16. Показов 33262. Ответов 13
Метки нет (Все метки)

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
#include <iostream>
#include <string>
using namespace std;
class student
{
    string name;
public:
    void y ()
    {
        string temporary;
    cout << "Введите имя\n";
    cin >> temporary;
    name = temporary;
    }
    void Print ()
    {
        cout << name <<endl;
    }
 
}
 
void main ()
{
    int size;
    cout << "Enter the size of the: ";
    cin >> size;
    char temp;
    char *Array = new char[size]();
    for (int j = 1; j < size; j++)
    {
        cout << "Student № " << j <<endl;
        cin >> temp;
                      Array[j] = &temp;
        student temp; // название объекта задает пользователь
    }
    temp.Print (); // здесь ошибка
}
это очень грубая конструкция я знаю и она работать не будет......(((
но она наглядно показывает задачу

а просто хотел узнать как можно так же зделать только правильно (есле можно фрагмент кода с коментариями или что почитать) а то я уже мозг проел с этой конструкцией(((

Добавлено через 20 минут
Тоесть нуна чтоб пользователь ввел например фамилию студента, потом student фамилия; (создание объекта) запись фамилии в динамический массив, а потом вызов метода класса путем извлечения фамилии из динамического массива и использования ее как фамилия.Print ();(метод вывода на экран)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.02.2012, 15:16
Ответы с готовыми решениями:

Динамическое выделение памяти для объекта класса
Скажите в чем отличие между A *ptr=new A() и A *ptr=new A;

Создание объекта класса с полем являющимся объектом другого класса
Bill a; cin&gt;&gt;a;//тут я ввел с помощью перегруженного оператора ElementSpiska c; //поля у...

Возможно ли создание объекта шаблонного класса в функции этого класса?
Доброго времени суток, уважаемые форумчане :) Мне по лабам задали задание - реализовать шаблон...

Создание объекта класса в методе этого же класса
собственно вопрос. можно ли создавать объект класса в методе того же класса? насколько это...

13
62 / 62 / 11
Регистрация: 16.10.2011
Сообщений: 200
29.02.2012, 15:34 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
        int size;
        cout << "Enter the size of the: ";
        cin >> size;
        char temp;
        char *Array = new char[size]();
        for (int j = 1; j < size; j++)
        {
                cout << "Student № " << j <<endl;
                cin >> temp;
                      Array[j] = &temp;
                student temp; // название объекта задает пользователь
        }
        temp.Print (); // здесь ошибка
Бредятина.
Скорее всего должно быть что-то такое.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void main( void )
{
  int size;
  cout << "Enter number of students: ";
  cin >> size;
  student *arr = new student[size];
  for (int i = 0; i < size; i++)
  {
    cout << "Insert student №" << i + 1 << ": ";
    cin >> arr[i].name;
  }
  
  cout << "Are in array: \n";
  for (int i = 0; i < size; i++)
     arr[i].Print();
}
Не обещаю, что будет работать, но идея такова.
1
1 / 1 / 1
Регистрация: 28.02.2012
Сообщений: 20
29.02.2012, 15:37  [ТС] 3
Цитата Сообщение от darkknight2008 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
        int size;
        cout << "Enter the size of the: ";
        cin >> size;
        char temp;
        char *Array = new char[size]();
        for (int j = 1; j < size; j++)
        {
                cout << "Student № " << j <<endl;
                cin >> temp;
                      Array[j] = &temp;
                student temp; // название объекта задает пользователь
        }
        temp.Print (); // здесь ошибка
Бредятина.
Скорее всего должно быть что-то такое.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void main( void )
{
  int size;
  cout << "Enter number of students: ";
  cin >> size;
  student *arr = new student[size];
  for (int i = 0; i < size; i++)
  {
    cout << "Insert student №" << i + 1 << ": ";
    cin >> arr[i].name;
  }
  
  cout << "Are in array: \n";
  for (int i = 0; i < size; i++)
     arr[i].Print();
}
Не обещаю, что будет работать, но идея такова.
спасибо ща бум думать))))))
0
62 / 62 / 11
Регистрация: 16.10.2011
Сообщений: 200
29.02.2012, 15:42 4
C++
1
ввел например фамилию студента, потом student фамилия;
Невозможно создать переменную с именем, которое вводит пользователь с клавиатуры.

Добавлено через 4 минуты
Не очел я. cin и cout не могут работать с типом string. Так что советую использовать динамические массивы. Либо работать с тем, что есть. Напиример считывать с клавиатуры в некий буфер, например char buf[100]; а затем присваивать его в переменную типа string
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
29.02.2012, 15:44 5
Цитата Сообщение от shadowstar Посмотреть сообщение
Тоесть нуна чтоб пользователь ввел например фамилию студента, потом student фамилия; (создание объекта) запись фамилии в динамический массив, а потом вызов метода класса путем извлечения фамилии из динамического массива и использования ее как фамилия.Print ();(метод вывода на экран)
Дорогой, да Вы никак бредите... Язык С++ компилируемый, а не динамический. Все имена переменных должны быть известны на этапе компиляции, а никак не в рантайме.

Вам надо сделать метод getName() в классе и использовать его для поиска нужного экземпляра.
Можно так же воспользоваться чем-то вроде std::map.

Или я неправильно понимаю поставленную задачу. Опишите изначальную задачу, а не так как Вы ее поняли.
0
1 / 1 / 1
Регистрация: 28.02.2012
Сообщений: 20
29.02.2012, 15:57  [ТС] 6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int size;
    cout << "Enter number of students: ";
    cin >> size;
    student *arr = new student[size];
    for (int i = 0; i < size; i++)
    {
        cout << "Insert student №" << i + 1 << ": ";
        cin >> arr[i].record_last_name; // выдает ошибку Error: a pointer to a bound function may only be used to call the function
    }
 
    cout << "Are in array: \n";
    for (int i = 0; i < size; i++)
        arr[i].Print();
Добавлено через 3 минуты
Цитата Сообщение от fasked Посмотреть сообщение
Дорогой, да Вы никак бредите... Язык С++ компилируемый, а не динамический. Все имена переменных должны быть известны на этапе компиляции, а никак не в рантайме.

Вам надо сделать метод getName() в классе и использовать его для поиска нужного экземпляра.
Можно так же воспользоваться чем-то вроде std::map.

Или я неправильно понимаю поставленную задачу. Опишите изначальную задачу, а не так как Вы ее поняли.
изначальная задача состоит в том что бы создать группу студентов используя динамический массив
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
#include <iostream>
#include <string>
#include "student.h"
 
 
 
using namespace std;
void main ()
{
    system("mode con cols=70 lines=50");
 
    // вызов конструктора с параметрами
    student Tolik("Pustinskiy", "Tolik", "Aleksandrovich", 26, 1, "Dobrovolskogo 18", "80630514051", 1111, "Programmist");
 
    cout << "Show\n";
    Tolik.Print ();
 
    student tempArray;
 
    cout << "Last name\n";
    tempArray.record_last_name ();
 
    cout << "Name\n";
    tempArray.record_name ();
 
    cout << "Middle name\n";
    tempArray.record_middle_name ();
 
    cout << "Home address\n";
    tempArray.record_home_address ();
 
    cout << "Names of specialization\n";
    tempArray.record_names_of_specialization ();
 
    cout << "Age\n";
    tempArray.record_age ();
 
    cout << "Phone number\n";
    tempArray.record_phone_number ();
 
    cout << "Group number\n";
    tempArray.record_group_number ();
 
    cout << "Sex\n";
    tempArray.record_sex ();
 
    cout << "Show\n";
    tempArray.Print ();
 
}
Добавлено через 35 секунд
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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#pragma once
#include <iostream>
#include <string>
 
using namespace std;
 
class student 
{
    string last_name;
    string name;
    string middle_name;
    int age;
    int sex;
    string home_address;
    string phone_number;
    int group_number;
    string names_of_specialization;
public:
    void record_last_name () // метод_записи_фамилии
    {
        string temporary;
        for (;;)
        {
            getline (cin , temporary);
            if (temporary.empty()){cout << "Empty string\n";continue;}
            else{cout << "Record\n" << endl;break;}
        }
        last_name = temporary;
    }
 
    void record_name () // метод_записи_имени
    {
        string temporary;
        for (;;)
        {
            getline (cin , temporary);
            if (temporary.empty()){cout << "Empty string\n";continue;}
            else{cout << "Record\n" << endl;break;}
        }
        name = temporary;
    }
 
    void record_middle_name () // метод_записи_отчества
    {
        string temporary;
        for (;;)
        {
            getline (cin , temporary);
            if (temporary.empty()){cout << "Empty string\n" <<endl;continue;}
            else{cout << "Record\n" << endl;break;}
        }
        middle_name = temporary;
    }
 
    void record_home_address () // метод_записи_домашнего_адреса
    {
        string temporary;
        for (;;)
        {
            getline (cin , temporary);
            if (temporary.empty()){cout << "Empty string\n" <<endl;continue;}
            else{cout << "Record\n" << endl;break;}
        }
        home_address = temporary;
    }
 
    void record_names_of_specialization () // метод_записи_специализации
    {
        string temporary;
        for (;;)
        {
            getline (cin , temporary);
            if (temporary.empty()){cout << "Empty string\n" <<endl;continue;}
            else{cout << "Record\n" << endl;break;}
        }
        names_of_specialization = temporary;
    }
 
    void record_age () // метод_записи_возраста
    {
        int temporary = 0;
        do
        {
            cin >> temporary;
        }while (temporary < 16 || temporary > 100);
        age = temporary;
    }
 
    void record_phone_number () // метод_записи_телефонного_номера
    {
        string temporary;
        for (;;)
        {
            getline (cin , temporary);
            if (temporary.empty()){cout << "Empty string\n" <<endl;continue;}
            else{cout << "Record\n" << endl;break;}
        }
        phone_number = temporary;
    }
 
    void record_group_number () // метод_записи_номера_группы
    {
        int temporary = 0;
        do
        {
            cin >> temporary ;
        }while (temporary <= 0);
        group_number = temporary;
    }
 
    void record_sex () // метод_записи_пола_студента
    {
        int temporary;
        cout << "1 = man, 2 = women\n";
        do
        {
            cin >> temporary;
        }while (temporary < 1 || temporary > 2);
        sex = temporary;
    };
 
    void Print () // вывод_на_экран_информации_о_студенте
    {
        cout << "Name of the student " << last_name << endl;
        cout << "The student's name " << name << endl;
        cout << "Student's first name " << middle_name << endl;
        cout << "Home address " << home_address << endl;
        cout << "Names_of_specialization " << names_of_specialization << endl;
        cout << "Age of the student " << age << endl;
        cout << "Phone number of the student " << phone_number << endl;
        cout << "Group_number " << group_number << endl;
        if (sex == 1) {cout << "Man\n";}
        else {cout << "Women\n";}
    }
 
    student () // конструктор_класса
    {
        last_name = "NULL";
        name = "NULL";
        middle_name = "NULL";
        age = 0;
        sex = 1;
        home_address = "NULL";
        phone_number = "NULL";
        group_number = 0;
        names_of_specialization = "NULL";
    }
 
    student (char *last_name_2, char *name_2, char *middle_name_2, int age_2, int sex_2, char *home_address_2, char *phone_number_2,
        int group_number_2, char *names_of_specialization_2)  // конструктор с параметрами
    {
        last_name = last_name_2;
        name = name_2;
        middle_name = middle_name_2;
        age = age_2;
        sex = sex_2;
        home_address = home_address_2;
        phone_number = phone_number_2;
        group_number = group_number_2;
        names_of_specialization = names_of_specialization_2;
    }
 
    ~student (void){}; // деструктор_класса
 
 
};
класс студент


 Комментарий модератора 
Используйте соответствующие теги для форматирования кода. Если Вы пишете на языке C++, то и код надо обрамлять тегами CPP.


Добавлено через 3 минуты
не могу понять как создать массив студентов если для добавления информации о студенте нужен объект который нужно создать(( использовать уже готовые не годится...я же не знаю какие у студентов будут фамилии((

а задача // создать группу студентов (динамический массив), отобразить данные на экран.

Добавлено через 2 минуты
сори за теги......я у вас недавно на форуме..... и на форумах вообще.........будем исправлять))
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
29.02.2012, 15:58 7
Цитата Сообщение от shadowstar Посмотреть сообщение
изначальная задача состоит в том что бы создать группу студентов используя динамический массив
Использование динамического массива подразумевает выделение памяти с помощью оператора new (и освобождение с помощью delete). А также использование циклов для обращения ко всем элементам массива последовательно:
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
void main ()
{
        system("mode con cols=70 lines=50");
 
        // выделяем память под массив из 10 элементов
        int size = 10;
        student *array = new student [size];
 
        // заполняем массив
        for (int i = 0; i < size; ++i)
        {
           cout << "Last name\n";
           array[i].record_last_name ();
    
           cout << "Name\n";
           array[i].record_name ();
    
           cout << "Middle name\n";
           array[i].record_middle_name ();
    
           cout << "Home address\n";
           array[i].record_home_address ();
    
           cout << "Names of specialization\n";
           array[i].record_names_of_specialization ();
    
           cout << "Age\n";
           array[i].record_age ();
    
           cout << "Phone number\n";
           array[i].record_phone_number ();
    
           cout << "Group number\n";
           array[i].record_group_number ();
    
           cout << "Sex\n";
           array[i].record_sex ();
        }
        
        // выводим массив на экран
        cout << "Show\n";
        for (int i = 0; i < size; ++i)
        {
           array[i].Print ();
        }
        
        // удаляем массив
        delete [] array;
}
3
1 / 1 / 1
Регистрация: 28.02.2012
Сообщений: 20
29.02.2012, 16:01  [ТС] 8
Цитата Сообщение от fasked Посмотреть сообщение
Использование динамического массива подразумевает выделение памяти с помощью оператора new (и освобождение с помощью delete). А также использование циклов для обращения ко всем элементам массива последовательно:
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
void main ()
{
        system("mode con cols=70 lines=50");
 
        // выделяем память под массив из 10 элементов
        int size = 10;
        student *array = new student [size];
 
        // заполняем массив
        for (int i = 0; i < size; ++i)
        {
           cout << "Last name\n";
           array[i].record_last_name ();
    
           cout << "Name\n";
           array[i].record_name ();
    
           cout << "Middle name\n";
           array[i].record_middle_name ();
    
           cout << "Home address\n";
           array[i].record_home_address ();
    
           cout << "Names of specialization\n";
           array[i].record_names_of_specialization ();
    
           cout << "Age\n";
           array[i].record_age ();
    
           cout << "Phone number\n";
           array[i].record_phone_number ();
    
           cout << "Group number\n";
           array[i].record_group_number ();
    
           cout << "Sex\n";
           array[i].record_sex ();
        }
        
        // выводим массив на экран
        cout << "Show\n";
        for (int i = 0; i < size; ++i)
        {
           array[i].Print ();
        }
        
        // удаляем массив
        delete [] array;
}
аааааааааааааааааааааааааааааа ЗЛО)))) спасибо
0
3 / 3 / 1
Регистрация: 19.02.2014
Сообщений: 115
23.05.2015, 00:44 9
А может кто подсказать. По лабораторной есть задание тоже создать динамический объект класса. Принцип я понял,создал.Но,в методичке по лабораторной указано,инициализировать объект путем через нотацию "->" и приведен пример с инициализацией 1го элемента и все. Я не могу понять а как остальные то инициализировать? Указавая индекс не помогает,вылетает ошибка.Подскажите плиз.Например вот инициализация через точку и индекс массива,а мне нужно через "->".
C++
1
2
3
4
5
  Samolet *sml;
  sml=new Samolet[3];
  sml[0].vvod("AN","18","Russia","bronirovanni",2000);
  sml[1].vvod("IL","52","Russia","passagirskii",3000);
  sml[2].vvod("Ty","144","Russia","istribitel",4000);
Дан пример вот так и все
C++
1
2
3
 Samolet *sml;
 sml=new Samolet[3];
 sml->vvod("AN","18","Russia","bronirovanni",2000);
А как инициализировать два других элемента??И интересно еще какой элемент из 3ех инициализируется то...
0
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
23.05.2015, 00:57 10
Цитата Сообщение от System16v Посмотреть сообщение
А как инициализировать два других элемента?
C++
1
2
3
sml->vvod("AN","18","Russia","bronirovanni",2000);
(sml + 1)->vvod("IL","52","Russia","passagirskii",3000);
(sml + 2)->vvod("Ty","144","Russia","istribitel",4000);
Цитата Сообщение от System16v Посмотреть сообщение
И интересно еще какой элемент из 3ех инициализируется то
Первый.
1
3 / 3 / 1
Регистрация: 19.02.2014
Сообщений: 115
23.05.2015, 01:08 11
DrOffset, спасибо .Сейчас попробую. Ведь точно...,по книге вспомнил что читал же об этом ,вот же память короткая...Из-за того что не пользовался нотацией этой,из головы вылетело
0
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
23.05.2015, 01:08 12
Цитата Сообщение от System16v Посмотреть сообщение
Есть идеи?Через индекс не хочет,а по другому я что-то вообще не могу сообразить как
А выше я для кого написал код?
1
3 / 3 / 1
Регистрация: 19.02.2014
Сообщений: 115
23.05.2015, 01:11 13
DrOffset, Не заметил сначала ,еще раз спасибо
0
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
23.05.2015, 01:15 14
System16v, тут можно добавить, что запись var[index] (в случае, если речь не идет о перегрузке оператора []) - это синтаксический сахар для записи *(var + index).
1
23.05.2015, 01:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.05.2015, 01:15
Помогаю со студенческими работами здесь

Создание объекта класса
Я пишу программу, и столкнулся с одной проблемой. Суть следующая. Ниже прикрепил примерную схему...

Создание объекта класса
Создал свой класс с именем и фамилией, не могу создать объект этого класса, при проверке на ошибки...

Создание объекта класса
Есть такой класс: class CSomeClass { public: void SomeMethod(); }; И вот как можно...

Создание объекта класса
Здравствуйте, подскажите пожалуйста в чем разница между Test t(блаблабла); и Test *t = new...


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

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