Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2010, 19:23   #1
Vegas
Пользователь
 
Регистрация: 15.04.2010
Сообщений: 29
По умолчанию Объектно-ориентированное программирование. Списки

Плиз кому не лень, дайте совет как лучше сделать:
Нужно описать список способный хранить информацию о студентах,книгах,кинофильмах.
Vegas вне форума Ответить с цитированием
Старый 20.04.2010, 20:16   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Код:
class Smth
{
//...
};
class Student: public Smth
{
//...
};
class Book: public Smth
{
//...
};
class Cinema: public Smth
{
//...
};

struct node
{
node(/**/);
Smth* data;
node* next;
};
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 20.04.2010, 22:10   #3
Vegas
Пользователь
 
Регистрация: 15.04.2010
Сообщений: 29
По умолчанию

Спасибо. Только просьба, если несложно можно поподробнее про stuct Node!!!
Vegas вне форума Ответить с цитированием
Старый 20.04.2010, 22:45   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Стандартная организация простейшего списка - тип "узел", который содержит в себе, во-первых, собственно данные, во-вторых, указатель на следующий элемент того же типа "узел". Если указатель равен нулю - то этот узел - конечный. Где-то имеется указатель на первый узел, с него в общем-то и начинается список, а продолжается по цепочке - от одного узла к следующему и так далее.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 20.04.2010, 22:49   #5
Vegas
Пользователь
 
Регистрация: 15.04.2010
Сообщений: 29
По умолчанию

Ещё раз спасибо, вроде что-то понял. Дальше может сам как.
Vegas вне форума Ответить с цитированием
Старый 27.04.2010, 00:58   #6
Vegas
Пользователь
 
Регистрация: 15.04.2010
Сообщений: 29
По умолчанию

Плз помогите, в общем есть код программы, который создаёт список студентов, возник вопрос как в него добавить ещё два списка, то есть ещё два класса (как я понимаю) и в конечном итоге должно получиться, то что получиться(читаем выше)!!!! За ранее большое спасибо.

#include <stdio.h>
#include <conio.h>
#include <stdafx.h>
#include <iostream>

using namespace std;

class student
{
public:
char Name[128];

student* pNext;
};


student* pHead = 0;

void add(student* pNDS)
{
pNDS->pNext = pHead;
pHead = pNDS;
}
student* getData()

{
char nameBuffer[128];
cout << "\nVvodim im9:";
cin >> nameBuffer;

if ((stricmp(nameBuffer, "exit") == 0))// если "exit" - выход
{
return 0;
}
student* pNDS = new student;
strncpy(pNDS->Name, nameBuffer, 128);
pNDS->Name[127] = '\0';
pNDS->pNext = 0;

return pNDS;
}

int main(int nNumberofArgs, char* pszArgs[])
{
cout << "Read names of students\n"
<< "Enter 'exit' for first name to exit\n";

// создание объекта student
student* pNDS;
while (pNDS = getData())
{
// добавление в конец списка
add(pNDS);
}

cout << "Dannie:\n";
pNDS = pHead;
while(pNDS)
{
cout << pNDS->Name << "\n";

pNDS = pNDS->pNext;
}

system("PAUSE");
return 0;
}
Vegas вне форума Ответить с цитированием
Старый 27.04.2010, 09:58   #7
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Код:
class student
{
public:
char Name[128];

student* pNext;
};
Ну вообще, я бы не сказал, что это класс студента.
Во-первых, обычно узел списка представляет собой нечто вроде вот этого (как я писал выше):
Код:
struct node
{
Smth* data;
node* next;
};
указатель на данные (ну а если эти данные имеют тип вроде int'а, то можно и не в виде указателя, а прямо как есть хранить, т.е. int data; вместо int* data, и указатель на следующий элемент. (ну и плюс конструктор, но его опустим тут для наглядности)
По таким вот канонам получается, что у вас имеется список строк (кстати, фиксированной длины, что тоже не есть очень хорошо для строк вообще).
А если информация о студенте содержит: имя, фамилию, курс, группу, номер комнаты в общаге, любимые предметы, возраст?
Список студентов необходимо реализовать через два класса: один - непосредственно тип "студент", другой - тип узла списка, содержащий в себе указатель на член типа "студент":
Код:
class student
{
//Тут различные данные о студенте
};

struct node
{
node(student*); //Конструктор
~node(); //Деструктор
student* data; //Собственно данные, хранимые по указателю
node* next; //Следующий элемент
};
Вот так будет правильнее сделать описанное вами.
Что же касается добавления еще двух классов, то если в списке одновременно могут быть студенты, книги и фильмы (что было бы довольно странно), то необходимо все их наследовать от одного общего предка и в списке хранить указатель на элемент типа этого предка, как я писал выше. Это если вы уже проходили наследование и полиморфизм. Если нет - то можно просто сделать три различных списка, различающиеся только типом хранимых данных.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 27.04.2010, 18:55   #8
Vegas
Пользователь
 
Регистрация: 15.04.2010
Сообщений: 29
По умолчанию

Большое спасибо, есть над чем подумать.
Vegas вне форума Ответить с цитированием
Старый 27.04.2010, 19:21   #9
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Вам нужно реализовать список или создать класс с использованием списков ?

И да, если уже писать список, то на шаблонах.

PS: std::list
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux

Последний раз редактировалось ozo; 27.04.2010 в 19:45.
ozo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объектно-ориентированное программирование 4ika Помощь студентам 2 04.04.2010 20:27
Объектно -ориентированное программирование Asira Помощь студентам 3 05.03.2010 17:52
Объектно-ориентированное программирование на паскале Ake Помощь студентам 3 11.06.2009 02:44
Объектно-ориентированное программирование dzhI Помощь студентам 8 19.03.2009 13:38
Объектно-ориентированное программирование (Паскаль) Ake Помощь студентам 1 22.02.2009 20:14