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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Error LNK2001: неразрешенный внешний символ ""public: void __thiscall CRenderTarget::phase_smap_direct http://www.cyberforum.ru/cpp-beginners/thread1493146.html
Доброго времени суток. Данный проект собирается на 2005 и 2008 студии. При попытке сбора на 2010 был ряд ошибок, с которыми я всё же справился, но на этапе компоновки случилось следующее. Ошибка 3 error LNK2001: неразрешенный внешний символ ""public: void __thiscall CRenderTarget::phase_smap_direct(class light *,unsigned int)"...
C++ Использование extern с функциями Добрый вечер! Скажем я задекларировал в каком-то модуле функцию extern void foo() ;. Но не описал её. Могу ли я при подключении этого модуля к моей программе описать тело этой функции в самой программе? http://www.cyberforum.ru/cpp-beginners/thread1493134.html
C++ Сортировка методом "пузырька"
Реализовать решение в виде функций ввода, вывода и обработки массивов. Отсортируйте в массиве положительные элементы по возрастанию, отрицательные – по убыванию. Как сделать эту сортировку #include <iostream> #include <cmath> #include <iomanip> using namespace std;
Вычислить значение суммы последовательности C++
Найти сумму ряда \sum \frac{(-1)^n}{3^n} с точностью 10-4
C++ Нахождение значения функции в заданной точке http://www.cyberforum.ru/cpp-beginners/thread1493103.html
Задача. Найти значение функции в точке, функция и точка задается с клавиатуры. В каком виде именно будет задаваться функция не сказано, поэтому я думаю в любом. Т.к. неизвестен вид, то не очень понятно, как это все таки сделать. Была идея решать рекурсией запускаясь с каждой скобки, но появляется проблема проверки приоритета операций и некоторые другие мелочи. Мб кто-нибудь сможет подсказать...
C++ Big-endian тестирование Есть программа, которая должна работать на little и big endian одинаково. В ней куча всяких "ifdef". С помощью какого ПО для виртуализации можно протестировать корректность приложениях для big-endian? подробнее

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

Задание: Поместить указатели на экземпляры классов в динамический массив. Для класса 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru