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

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

Войти
Регистрация
Восстановить пароль
 
Андрюшатина
75 / 55 / 38
Регистрация: 27.11.2014
Сообщений: 350
#1

Поместить указатели на экземпляры классов в динамический массив - C++

05.07.2015, 02:01. Просмотров 209. Ответов 0
Метки нет (Все метки)

Добрый день.
Не идет данная тема. Прошу помощи.

Задание: Поместить указатели на экземпляры классов в динамический массив. Для класса Person необходимо реализовать операторы < и >. В динамическом массиве реализовать функцию сортировки списка с использование указанных операторов.

Нужна помощь с:
1. Указателями на экземпляр класса.
2. Посмотрите пожалуйста, правильно ли реализована перегрузка < и >.
3. Не до конца понимаю реализацию сортировки именно с этим перегруженным оператором.

Кому не сложно поясните пожалуйста.

П.С.: Я только начал изучать С++, ни векторы, ни шаблоны и т.д. ещё ничего не знаю. Поэтому, если можно, в примитиве подскажите.

Head
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
#pragma once
#include <iostream>
#include <Windows.h>
using namespace std;
struct date{
    int day;
    char*month;
    int year;
};
class Student{
private:
    char *surname;
    char *name;
    char *midname;
    date birthday;
    char *address;
    int ph_number;
    char *email;
    int ICQ;
    char* name_group;
public:
    Student();
    Student(char* aSurname, char* aName, char* aMidname, int aDay, char* aMonth, int aYear, char* aAddress, int aPh_number, char* aEmail, int aICQ, char* aName_group);
    ~Student();
 
    void set_surname(char* aSurname);
    void set_name(char *aName);
    void set_midname(char *aMidname);
    void set_birthday(int aDay, char* aMonth, int aYear);
    void set_address(char *aAddress);
    void set_ph_number(int aPh_number);
    void set_email(char *aEmail);
    void set_ICQ(int aICQ);
    void set_name_group(char *aName_group);
 
 
    char *get_surname();
    char *get_name();
    char *get_midname();
    int get_day();
    char *get_month();
    int get_year();
    char *get_address();
    int get_ph_number();
    char *get_email();
    int get_ICQ();
    char *get_name_group();
 
    void write(FILE *f);
    void print(FILE *f);
 
    bool operator==(const Student &obj);
 
    bool Student::operator!=(const Student &obj);
 
    bool operator>( Student  &aStudent);
    bool operator<( Student &aStudent);
};
.cpp
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
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
#include "Student.h"
#include <iostream>
#include <stdio.h>
using namespace std;
 
Student::Student(){ //konstruktor po ymolchaniu
    surname = NULL;
    name = NULL;
    midname = NULL;
    birthday.day = 0;
    birthday.month = NULL;
    birthday.year = 0;
    address = NULL;
    ph_number = 0;
    email = NULL;
    ICQ = 0;
    name_group = NULL;
}
Student::Student(char* aSurname, char* aName, char* aMidname, int aDay, char* aMonth, int aYear, char* aAddress, int aPh_number, char* aEmail, int aICQ, char* aName_group){//peregruzheniy konstruktor
    surname = new char[strlen(aSurname) + 1];
    strcpy_s(surname, strlen(aSurname) + 1, aSurname);
    name = new char[strlen(aName) + 1];
    strcpy_s(name, strlen(aName) + 1, aName);
    midname = new char[strlen(aMidname) + 1];
    strcpy_s(midname, strlen(aMidname) + 1, aMidname);
    birthday.day = aDay;
    birthday.month = new char[strlen(aMonth) + 1];
    strcpy_s(birthday.month, strlen(aMonth) + 1, aMonth);
    birthday.year = aYear;
    address = new char[strlen(aAddress) + 1];
    strcpy_s(address, strlen(aAddress) + 1, aAddress);
    ph_number = aPh_number;
    email = new char[strlen(aEmail) + 1];
    strcpy_s(email, strlen(aEmail) + 1, aEmail);
    aICQ = aICQ;
    name_group = new char[strlen(aName_group) + 1];
    strcpy_s(name_group, strlen(aName_group) + 1, aName_group);
}
Student::~Student(){ //destructor
    delete[]surname;
    delete[]name;
    delete[]midname;
    delete[]birthday.month;
    delete[]address;
    delete[]email;
    delete[]name_group;
}
 
void Student::set_surname(char* aSurname){
    if (surname != 0)
        delete[] surname;
    surname = new char[strlen(aSurname) + 1];
    strcpy_s(surname, strlen(aSurname) + 1, aSurname);
    surname = aSurname;
}
void Student::set_name(char* aName){
    if (name != 0)
        delete[] name;
    name = new char[strlen(aName) + 1];
    strcpy_s(name, strlen(aName) + 1, aName);
    name = aName;
}
void Student::set_midname(char* aMidname){
    if (midname != 0)
        delete[] midname;
    midname = new char[strlen(aMidname) + 1];
    strcpy_s(midname, strlen(aMidname) + 1, aMidname);
    midname = aMidname;
}
void Student::set_birthday(int aDay, char* aMonth, int aYear){
    birthday.day = aDay;
    if (birthday.month != 0)
        delete[] birthday.month;
    birthday.month = new char[strlen(aMonth) + 1];
    strcpy_s(birthday.month, strlen(aMonth) + 1, aMonth);
    birthday.month = aMonth;
    birthday.year = aYear;
}
void Student::set_address(char *aAddress){
    if (address != 0)
        delete[] address;
    address = new char[strlen(aAddress) + 1];
    strcpy_s(address, strlen(aAddress) + 1, aAddress);
    address = aAddress;
}
void Student::set_ph_number(int aPh_number){
    ph_number = aPh_number;
}
void Student::set_email(char *aEmail){
    if (email != 0)
        delete[] email;
    email = new char[strlen(aEmail) + 1];
    strcpy_s(email, strlen(aEmail) + 1, aEmail);
    email = aEmail;
}
void Student::set_ICQ(int aICQ){
    ICQ = aICQ;
}
void Student::set_name_group(char *aName_group){
    if (name_group != 0)
        delete[] name_group;
    name_group = new char[strlen(aName_group) + 1];
    strcpy_s(name_group, strlen(aName_group) + 1, aName_group);
    name_group = aName_group;
}
 
char *Student::get_surname(){
    return name;
}
char *Student::get_name(){
    return name;
}
char *Student::get_midname(){
    return midname;
}
int Student::get_day(){
    return birthday.day;
}
char *Student::get_month(){
    return birthday.month;
}
int Student::get_year(){
    return birthday.year;
}
char *Student::get_address(){
    return address;
}
int Student::get_ph_number(){
    return ph_number;
}
char *Student::get_email(){
    return email;
}
int Student::get_ICQ(){
    return ICQ;
}
char *Student::get_name_group(){
    return name_group;
}
 
void Student::print(FILE *f){
    cout << "Surname: " << surname << endl;
    cout << "Name: " << name << endl;
    cout << "Middle name: " << midname << endl;
    cout << "Birthday: " << birthday.day << "." << birthday.month << "." << birthday.year << endl;
    cout << "Address: " << address << endl;
    cout << "Phone number: " << ph_number << endl;
    cout << "Email: " << email << endl;
    cout << "ICQ: " << ICQ << endl;
    cout << "Group name: " << name_group << endl;
}
 
void Student::write(FILE* f){ //метод записи в бинарный файл
    int sz = strlen(surname);
    fwrite(&sz, sizeof(sz), 1, f);
    fwrite(surname, sz, 1, f);
 
    int sz1 = strlen(name);
    fwrite(&sz1, sizeof(sz1), 1, f);
    fwrite(name, sz1, 1, f);
 
    int sz2 = strlen(midname);
    fwrite(&sz2, sizeof(sz2), 1, f);
    fwrite(midname, sz2, 1, f);
 
    fwrite(&birthday.day, sizeof(birthday.day), 1, f);
 
    int sz3 = strlen(birthday.month);
    fwrite(&sz3, sizeof(sz3), 1, f);
    fwrite(birthday.month, sz3, 1, f);
 
    fwrite(&birthday.year, sizeof(birthday.year), 1, f);
 
    int sz4 = strlen(address);
    fwrite(&sz4, sizeof(sz4), 1, f);
    fwrite(address, sz4, 1, f);
 
    fwrite(&ph_number, sizeof(ph_number), 1, f);
 
    int sz5 = strlen(email);
    fwrite(&sz5, sizeof(sz5), 1, f);
    fwrite(email, sz5, 1, f);
 
    fwrite(&ICQ, sizeof(ICQ), 1, f);
 
    int sz6 = strlen(name_group);
    fwrite(&sz6, sizeof(sz6), 1, f);
    fwrite(name_group, sz6, 1, f);
}
 
bool Student::operator== (const Student &obj){
    return
        !_stricmp(surname, obj.surname) &&
        !_stricmp(name, obj.name) &&
        !_stricmp(midname, obj.midname) &&
        birthday.day == obj.birthday.day&&
        !_stricmp(birthday.month, obj.birthday.month) &&
        birthday.year==obj.birthday.year&&
        !_stricmp(address, obj.address) &&
        ph_number == obj.ph_number&&
        !_stricmp(email, obj.email) &&
        ICQ == obj.ICQ&&
        !_stricmp(name_group, obj.name_group);
}
bool Student::operator!=(const Student &obj) {
    return !(*this == obj);
    }
bool Student::operator>( Student &aStudent){
    int year1 = birthday.year;
    int year2 = aStudent.birthday.year;
    return (year1 > year2) ? true : false;
}
bool Student::operator<(Student &aStudent){
    int year1 = birthday.year;
    int year2 = aStudent.birthday.year;
    return (year1 < year2) ? true : false;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2015, 02:01
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Поместить указатели на экземпляры классов в динамический массив (C++):

Как поместить в STL-контейнер экземпляры разных классов? - C++
Как поместить в контейнер экземпляры разных классов(типов) :thank_you:?

Как создать класс контейнер-динамический массив и поместить туда объекты других классов? - C++
Какой тип массива использовать тип базового класса или наследников?

Поместить данные в динамический массив - C++
Как запомнить char динамический массив при описе? char **map = new char * ; for (int i=0;i&lt;sizey;i++) { map=new char ; } map = ...

Динамический массив и указатели!? - C++
Объясните пожалуйста как можно передать двумерный динамический массив с одной функции в другую с помощью указателей? И вот эта программа...

Указатели, динамический массив, пользовательская функция - C++
Создать функцию для поиска максимального отрицательного значения в массиве. Вернуть указатель и число отрицательных элементов. Создать два...

Считать строки файла и поместить в динамический массив строк - C++
Ребята помогите. Нужно считать с файла, в котором 1 строка - 1 слово, строки и поместить их в динамический массив строк типа char...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2015, 02:01
Привет! Вот еще темы с ответами:

Динамический массив классов - C++
Добрый день. Прошу помощи, совета или т.п. Есть класс, который содержит динамический массив на тип double. Вот часть класса: ...

Динамический массив (классов) - C++
Вот такой вопрос, почему так? #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class primer { public: primer...

Запись данных в динамический массив через указатели - C++
Здравствуйте! У меня возникла проблема... Когда я ввожу, например, 10 чисел в дин. массив, цикл while(через который я и хочу организовать...

Возможно ли объекты и потомки этих объектов поместить в один и тот же динамический массив? - C++
У меня есть объекты, очень сложные объекты. Они постоянно относятся то одному то другому массива, они постоянно выполняют большое...


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

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

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