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

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

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

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

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

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

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

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

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

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

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

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

ООП Классы - C++
#include <iostream> #include <vector> #include <string> #include <iomanip> #include <sstream> #include <limits> using...

ООП и наследование - C++
Доброго времени суток, форумчане. Столкнулся с такой непонятной ситуацией. Есть класс А class A { private: int i=1; public: ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 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;
};
stark91
1 / 1 / 0
Регистрация: 07.05.2010
Сообщений: 55
10.09.2011, 16:19  [ТС]     ООП и все такое #3
Большое спасибо, но немогли бы вы пояснить эту строку?
Цитата Сообщение от Jupiter Посмотреть сообщение
student = new Student [amount_of_students]();
Я так понимаю она выделяет память для какого-то количества обьектов, как тогда получить доступ к конкретному?
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]);
stark91
1 / 1 / 0
Регистрация: 07.05.2010
Сообщений: 55
10.09.2011, 16:58  [ТС]     ООП и все такое #5
А вот допустим я создал динамический массив на 10 элементов, заполнил их, и нужно добавить еще несколько элементов, то как тут быть? только очередью реализовать?
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 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
alkagolik
Заблокирован
10.09.2011, 17:17     ООП и все такое #7
Цитата Сообщение от stark91 Посмотреть сообщение
я создал динамический массив на 10 элементов, заполнил их, и нужно добавить еще несколько элементов
я бы тоже хотел это узнать. в Си есть для этого
C
1
realloc()
а как это сделать средствами плюсов...
diagon
Higher
1927 / 1193 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
10.09.2011, 17:18     ООП и все такое #8
Цитата Сообщение от alkagolik Посмотреть сообщение
а как это сделать средствами плюсов...
vector.resize()
TheAthlete
152 / 152 / 13
Регистрация: 31.08.2010
Сообщений: 534
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]
alkagolik
Заблокирован
10.09.2011, 17:26     ООП и все такое #10
Цитата Сообщение от diagon Посмотреть сообщение
vector.resize()
а минуя vector и вообще контейнеры?
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.09.2011, 17:31     ООП и все такое #11
Цитата Сообщение от alkagolik Посмотреть сообщение
а минуя vector и вообще контейнеры?
в С++ нет аналога Си-шного realloc
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";
}
easybudda
Эксперт С++
9456 / 5469 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
23.09.2011, 17:26     ООП и все такое #13
Цитата Сообщение от alkagolik Посмотреть сообщение
а минуя vector и вообще контейнеры?
Так они (контейнеры) как-раз для таких случаев и созданы, зачем велосипеды-то изобретать?

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

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

Книга по ООП Си++ - C++
Добрый вечер , мне дали задание ,написать двусвязный список на С++ с помощью ООП... Подскажите , пожалуйста , книгу или статью, по...

Курсовая по ООП - C++
Одна тема - одно задание. Потрудитесь!

VS 2013 и ООП - C++
столкнулся с проблемой. вроде пытаюсь освоить Directx11 по урокам (не помню ника, с этого форума ). Так вот, столкнулся с проблемой, а...

Материал по ООП - C++
Сейчас изучаю начало начал в с++. То есть простейшие консольные программы строю. Хотелось бы уже попробовать поработать с настоящим...


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

Или воспользуйтесь поиском по форуму:
stark91
1 / 1 / 0
Регистрация: 07.05.2010
Сообщений: 55
24.09.2011, 19:12  [ТС]     ООП и все такое #16
=)
вот лог:

1>------ Построение начато: проект: oop_lab1, Конфигурация: Debug Win32 ------
1>Построение начато 24.09.2011 12:52:17.
1>InitializeBuildStatus:
1> Обращение к "Debug\oop_lab1.unsuccessfulbuild".
1>ClCompile:
1> Для всех выходных данных обновления не требуется.
1>ManifestResourceCompile:
1> Для всех выходных данных обновления не требуется.
1>oop_lab1.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall STUDENT::STUDENT(void)" (??0STUDENT@@QAE@XZ) в функции "public: __thiscall GROUP::GROUP(void)" (??0GROUP@@QAE@XZ)
1>oop_lab1.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall STUDENT::~STUDENT(void)" (??1STUDENT@@QAE@XZ) в функции "public: void * __thiscall STUDENT::`scalar deleting destructor'(unsigned int)" (??_GSTUDENT@@QAEPAXI@Z)
1>C:\Users\Stark\documents\visual studio 2010\Projects\oop_lab1\Debug\oop_lab1.exe : fatal error LNK1120: 2 неразрешенных внешних элементов
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:01.48
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Добавлено через 6 часов 18 минут
Вообщем я нашел что надо убрать что бы запустить компиляцию и запуск программы, но после запуска идет выполнение функции, которая не должна выполняться первой.

Вот каким получился код:

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
#include <iostream>
#include <conio.h>
#define and &&
#define or ||
#define name_length 20
using namespace std;
 
//____________________GLOBAL DATA___________________|
 
//Class Student
class STUDENT
{
private:
    char chFirstName[name_length];
    char chLastName[name_length];
    char chMobileNumber[mobile_length];
public:
    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]*/);
};
 
//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;
 
    do
    {
        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');
}
 
 
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();
    pv->p = NULL;
    pHead = pTail = pv;
}
 
void GROUP::vAddStudent() 
{
    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";
}
Вместо PrintOperations();
выполняется vAddStudent();
непонятно почему...
Yandex
Объявления
24.09.2011, 19:12     ООП и все такое
Ответ Создать тему
Опции темы

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