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

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

Восстановить пароль Регистрация
 
Андрюшатина
 Аватар для Андрюшатина
28 / 28 / 13
Регистрация: 27.11.2014
Сообщений: 174
05.07.2015, 02:01     Поместить указатели на экземпляры классов в динамический массив #1
Добрый день.
Не идет данная тема. Прошу помощи.

Задание: Поместить указатели на экземпляры классов в динамический массив. Для класса 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2015, 02:01     Поместить указатели на экземпляры классов в динамический массив
Посмотрите здесь:

Динамический массив (классов) C++
C++ как использовать экземпляры классов МFC
C++ Статический и динамический экземпляры класса
C++ Динамический массив и указатели!?
Запись данных в динамический массив через указатели C++
Динамический массив классов C++
C++ Возможно ли объекты и потомки этих объектов поместить в один и тот же динамический массив?
C++ Поместить данные в динамический массив

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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