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

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

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

Студворк — интернет-сервис помощи студентам
Примерно что должно получится:

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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.02.2012, 15:16
Ответы с готовыми решениями:

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

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

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

13
 Аватар для darkknight2008
62 / 62 / 11
Регистрация: 16.10.2011
Сообщений: 200
29.02.2012, 15:34
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  [ТС]
Цитата Сообщение от 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
 Аватар для darkknight2008
62 / 62 / 11
Регистрация: 16.10.2011
Сообщений: 200
29.02.2012, 15:42
C++
1
ввел например фамилию студента, потом student фамилия;
Невозможно создать переменную с именем, которое вводит пользователь с клавиатуры.

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

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

Или я неправильно понимаю поставленную задачу. Опишите изначальную задачу, а не так как Вы ее поняли.
0
1 / 1 / 1
Регистрация: 28.02.2012
Сообщений: 20
29.02.2012, 15:57  [ТС]
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
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
29.02.2012, 15:58
Цитата Сообщение от 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  [ТС]
Цитата Сообщение от 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
 Аватар для System16v
3 / 3 / 1
Регистрация: 19.02.2014
Сообщений: 115
23.05.2015, 00:44
А может кто подсказать. По лабораторной есть задание тоже создать динамический объект класса. Принцип я понял,создал.Но,в методичке по лабораторной указано,инициализировать объект путем через нотацию "->" и приведен пример с инициализацией 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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
23.05.2015, 00:57
Цитата Сообщение от 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
 Аватар для System16v
3 / 3 / 1
Регистрация: 19.02.2014
Сообщений: 115
23.05.2015, 01:08
DrOffset, спасибо .Сейчас попробую. Ведь точно...,по книге вспомнил что читал же об этом ,вот же память короткая...Из-за того что не пользовался нотацией этой,из головы вылетело
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
23.05.2015, 01:08
Цитата Сообщение от System16v Посмотреть сообщение
Есть идеи?Через индекс не хочет,а по другому я что-то вообще не могу сообразить как
А выше я для кого написал код?
1
 Аватар для System16v
3 / 3 / 1
Регистрация: 19.02.2014
Сообщений: 115
23.05.2015, 01:11
DrOffset, Не заметил сначала ,еще раз спасибо
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
23.05.2015, 01:15
System16v, тут можно добавить, что запись var[index] (в случае, если речь не идет о перегрузке оператора []) - это синтаксический сахар для записи *(var + index).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.05.2015, 01:15
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru