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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.63
stark91
1 / 1 / 0
Регистрация: 07.05.2010
Сообщений: 55
#1

ООП и все такое - C++

10.09.2011, 15:24. Просмотров 1055. Ответов 15
Метки нет (Все метки)

Собственно сама задача:
Необходимо описать класс "Студенческая группа". Предусмотреть возможность работы с переменным числом студентов, поиском студентов по фамилии или номеру телефона и вывод списка студентов.

Я начал решать с того что создал класс "Студент". Но так как нужно описать класс "Студ. Группа", я немного заступорился и не знаю что сделать. Есть идея создать еще один класс, и в него запихнуть класс "Студент" и методы работы с очередью, только сделать это труднее чем сказать=)

Нужна помощь с решением данной задачи.
Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2011, 15:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ООП и все такое (C++):

Что такое ООП. - C++
"Объе́ктно-ориенти́рованное программи́рование (ООП) — парадигма программирования, в которой основными концепциями являются понятия объектов...

OOP (все принципы ООП и основные отношения между классами) - C++
Здравствуйте, помогите пожалуйста. Стоит задача показать все принципы ООП и основные отношения между класами. Сильно не ругайтесь, только...

Массив структур и все такое - C++
В чем суть: Существует описание структуры struct student { string NAME; int GROUP; int SES; };

Нормальная девиация и все такое - C++
Есть массив num i-го размера, в который мы запихали, например, неважно, откуда взятых, i=100 целых случайных чисел от 0 до 100к...

Как можно сделать такое? (Автоматическое нажатие клавиш и все что с этим связанно) - C++
У меня возник вопрос как можно сделать чтоб программа автоматически нажимала на определенные клавиши? Например в игре GTA SAMP: Чтоб...

Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами? - C++
Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?

15
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.09.2011, 15:57 #2
примерно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Student {
//...  
};
 
class AcademicGroup {
public:
    AcademicGroup(unsigned amount_of_students = 0)
    {
        students = amount_of_students;
        student = new Student [amount_of_students]();
    }
 
    ~AcademicGroup()
    {
        delete [] student;
    }
private:
    Student* student;
    unsigned students;
};
1
stark91
1 / 1 / 0
Регистрация: 07.05.2010
Сообщений: 55
10.09.2011, 16:19  [ТС] #3
Большое спасибо, но немогли бы вы пояснить эту строку?
Цитата Сообщение от Jupiter Посмотреть сообщение
student = new Student [amount_of_students]();
Я так понимаю она выделяет память для какого-то количества обьектов, как тогда получить доступ к конкретному?
0
alkagolik
Заблокирован
10.09.2011, 16:31 #4
Цитата Сообщение от stark91 Посмотреть сообщение
как тогда получить доступ к конкретному?
C++
1
student = new Student [amount_of_students]();//динамический массив объектов типа Student
C++
1
for(int i=0; i!=amount_of_students; ++i) function(student[i]);
1
stark91
1 / 1 / 0
Регистрация: 07.05.2010
Сообщений: 55
10.09.2011, 16:58  [ТС] #5
А вот допустим я создал динамический массив на 10 элементов, заполнил их, и нужно добавить еще несколько элементов, то как тут быть? только очередью реализовать?
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.09.2011, 17:08 #6
C++
1
2
3
4
5
6
7
student = new Student [10]();
Student* tmp = new Student [20]();
for (int i = 0; i < 10; ++i)
    tmp[i] = student[i];
delete [] student;
student = tmp;
//дальше работаем со student
0
alkagolik
Заблокирован
10.09.2011, 17:17 #7
Цитата Сообщение от stark91 Посмотреть сообщение
я создал динамический массив на 10 элементов, заполнил их, и нужно добавить еще несколько элементов
я бы тоже хотел это узнать. в Си есть для этого
C
1
realloc()
а как это сделать средствами плюсов...
0
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
10.09.2011, 17:18 #8
Цитата Сообщение от alkagolik Посмотреть сообщение
а как это сделать средствами плюсов...
vector.resize()
0
TheAthlete
153 / 153 / 13
Регистрация: 31.08.2010
Сообщений: 536
10.09.2011, 17:19 #9
на мой вгляд лучше всего реализовать следующим образом:

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <vector>
class Student {
//...  
};
 
int main() {
  std::vector<Student> AcademicGroup;
  Student stud1; // здесь еще добавляем нужные данные в объект класса Student
  Student stud2; // здесь еще добавляем нужные данные в объект класса Student
  AcademicGroup.push_back(stud1);
  AcademicGroup.push_back(stud2);
}
для доступа к вектору можно использовать индексирование, т.е.
для доступа к stud1 нужно набрать AcademicGroup[0],
для доступа к stud2 нужно набрать AcademicGroup[1]
0
alkagolik
Заблокирован
10.09.2011, 17:26 #10
Цитата Сообщение от diagon Посмотреть сообщение
vector.resize()
а минуя vector и вообще контейнеры?
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.09.2011, 17:31 #11
Цитата Сообщение от alkagolik Посмотреть сообщение
а минуя vector и вообще контейнеры?
в С++ нет аналога Си-шного realloc
0
stark91
1 / 1 / 0
Регистрация: 07.05.2010
Сообщений: 55
23.09.2011, 17:20  [ТС] #12
написал код, не скомпилировать, не знаю в чем ошибка.
Компилировал на VS10.
Помогите пожалуйста.

вот код:

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
218
219
220
#include <iostream>
#include <conio.h>
#define and &&
#define or ||
#define name_length 20
//#define mobile_length 11
using namespace std;
 
//____________________GLOBAL DATA___________________|
 
//Class Student
class STUDENT
{
private:
    char chFirstName[name_length];
    char chLastName[name_length];
    char chMobileNumber[mobile_length];
public:
    STUDENT();
    STUDENT *p;
    void vPrintStudent();
    bool bCompare(char str[name_length]);
//  bool bCompare(int num[mobile_length]);
    void vSetStudent(/*char FirstName[name_length], char LastName[name_length], int MobileNumber[mobile_length]*/);
    ~STUDENT();
};
 
//class Group
class GROUP
{
private:
    int iStudentNumber; //Number of Students in a group
    STUDENT *pHead;
    STUDENT *pTail; 
public:
    GROUP();
    void vSearchStudent(bool select); //Search student [1-via Last name] [0-via Phone number]
    void vPrintList(); //Print list of students
    void vAddStudent(); //Add new student
    void vRemoveStudent(); //Delete Student
    ~GROUP();
};
 
//Objects
STUDENT student;
GROUP group;
 
 
//_____________________FUNCTIONS_____________________|
 
//Work program
void Work();
 
//Print operations
void PrintOperations();
 
 
 
 
 
 
 
 
//_______________________MAIN________________________|
 
int main()
{
    Work();
    return 0;
}
 
 
 
 
 
 
//_________________FUNCTION DEFINE___________________|
 
void Work()
{
    char choice;
 
//  GROUP();
    do
    {
        system("cls");
        PrintOperations();
        cin >> choice;
        
        switch (choice)
        {
            case '1': group.vAddStudent(); break;
            case '2': group.vSearchStudent(1); break;
            case '3': group.vSearchStudent(0); break;
            case '4': group.vPrintList(); break;
        }
    }
    while (choice != '5');
//  group.~GROUP();
}
 
 
void PrintOperations()
{
    system("cls");
    cout << "Chose the operation:\n";
    cout << "1. Add student\n";
    cout << "2. Find student(via phone number)\n";
    cout << "3. Find student(via Last name)\n";
    cout << "4. Print group\n";
    cout << "5. Exit\n";
}
 
 
GROUP::GROUP()
{
    cout << "Enter the student data for list formation:\n";
    STUDENT *pv = new STUDENT;
    pv->vSetStudent();  //3aMEHa need
    pv->p = NULL;
    pHead = pTail = pv;
}
 
void GROUP::vAddStudent() //re-define
{
    system("cls");
    STUDENT *pv = new STUDENT;
    pv->vSetStudent();
    pv->p = NULL;
    pTail->p = pv;
    pTail = pv;
}
 
void GROUP::vPrintList()
{
    system("cls");
    cout << "Group list\n";
    STUDENT *pv = pHead;
    pv->vPrintStudent();
    while (pv->p!=NULL)
    {
        pv = pv->p;
        pv->vPrintStudent();
    }
    getch();
}
 
void GROUP::vSearchStudent(bool select)
{
    char number[name_length];
    char name[name_length];
    
    system("cls");
    STUDENT *pv = pHead;
    if (select)
    {
        cout <<"Enter the Last name of Student:";
        cin >> name;
        if (pv->bCompare(name)) pv->vPrintStudent();
        while (pv->p!=NULL)
        {
            pv = pv->p;
            if (pv->bCompare(name)) pv->vPrintStudent();
        }
    }
    else
    {
        cout << "Enter the phone number of Student";
        cin >> number[mobile_length];
        if (pv->bCompare(number)) pv->vPrintStudent();
        while (pv->p!=NULL)
        {
            pv = pv->p;
            if (pv->bCompare(number)) pv->vPrintStudent();
        }
    }
    system("cls");
    cout << "results:\n";
}
 
void STUDENT::vPrintStudent()
{
    cout << chFirstName[name_length] <<"  ";
    cout << chLastName[name_length] << "  ";
    cout << chMobileNumber[mobile_length] << "\n";
}
 
void STUDENT::vSetStudent()
{
    system("cls");
 
    cout << "\nEnter name of student:";
    cin >> chFirstName;
 
    cout << "\nEnter last Name of Student";
    cin >> chLastName;
 
    cout << "\nEnter mobile number of student";
    cin >> chMobileNumber;
}
 
bool STUDENT::bCompare(char str[name_length])
{
    if (!strcmp(str,chFirstName)) 
        return 1;
    else 
        return 0;
}
 
GROUP::~GROUP()
{
    STUDENT *temp = pHead;
    while (pHead->p!=NULL)
    {
            pHead = pHead->p;
            delete temp;
            temp = pHead;
    }
    cout << "\nThe memory is free";
}
0
easybudda
Модератор
Эксперт CЭксперт С++
9698 / 5648 / 964
Регистрация: 25.07.2009
Сообщений: 10,863
23.09.2011, 17:26 #13
Цитата Сообщение от alkagolik Посмотреть сообщение
а минуя vector и вообще контейнеры?
Так они (контейнеры) как-раз для таких случаев и созданы, зачем велосипеды-то изобретать?

Цитата Сообщение от stark91 Посмотреть сообщение
Я начал решать с того что создал класс "Студент". Но так как нужно описать класс "Студ. Группа", я немного заступорился и не знаю что сделать.
Ну начало правильное. Следующим шагом создать класс "группа" на основе стандартного контейнера (того же vector к примеру), который и будет содержать некоторый набор объектов класса "студент" ну и сортировать/изменять/печатать их по мере надобности...
0
stark91
1 / 1 / 0
Регистрация: 07.05.2010
Сообщений: 55
23.09.2011, 20:08  [ТС] #14
Так как я с контейнерами еще не знаком, то я выполнил без них.

Добавлено через 2 часа 36 минут
Не у кого нету идей почему не копилится? помогите пожалуйста) хочется побыстрей разобраться с этой лабой
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
23.09.2011, 20:13 #15
stark91, может лог ошибок покажешь? взрослый парень, а в телепатов веришь
0
23.09.2011, 20:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2011, 20:13
Привет! Вот еще темы с ответами:

Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа? - C++
Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа?

Что такое хэндлер файла? Что такое файловый указатель? - C++
Что такое хэндлер файла? Что такое файловый указатель?

Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из них - C++
Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из них пожалуйста.

Объяснить что такое "раздельная компиляция", что такое "интерфейс класса" и "реализация класса" на примере - C++
Есть класс, содержащий объекты и конструктор. Конструктор объявляется в одном из cpp файлов(их несколько). Можно ли, как-то, использовать...


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

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

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