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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 63, средняя оценка - 4.95
Venera
7 / 6 / 1
Регистрация: 31.10.2008
Сообщений: 92
#1

Структура в классе, это возможно? - C++

31.10.2008, 04:17. Просмотров 8502. Ответов 6
Метки нет (Все метки)

У меня такая проблема, нужно реализовать объект-список. В нем необходимо реализовать методы обеспечивающие полную функциональность списка.
Затем написать программу по работе с данным списком. Мне нужно вести пациентов в поликлинике, Ф.И.О., № полиса, к какому специалисту направляется, дата и время приема. Я написала структуру, прямо в классе, а вот как теперь обращаться к элементам структуры, как им параметры передавать не могу придумать. Вообще может не нужно структуру в класс записывать, тогда посоветуйте другой вариант, а то уже 3 день не могу придумать.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
31.10.2008, 09:07     Структура в классе, это возможно? #2
Объявить структуру в другом хедере, а потом просто обьявить в классе обьект с таким типом.

Добавлено через 8 минут 37 секунд
Тоесть например
Это например пишешь в someheader.h
C++
1
2
3
4
5
struct Tdata{
    std::string name;
    std::string second_name;
    //....
};
А в том классе, где надо использовать делаешь инклюд и обьявляешь обьект типа Tdata
C++
1
2
3
4
class A{
         Tdata data;
         //...
};
Или можно унаследовать..
Inlight
43 / 42 / 2
Регистрация: 17.09.2008
Сообщений: 98
31.10.2008, 10:42     Структура в классе, это возможно? #3
Если структура в классе, то как-то так.. Список односвязный
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
#include <iostream>
#include <string>
using namespace std;
class List
{
private:
    struct Patient
    {
        string FIO;
        int numOfPolicy;
        string specialist;
        string receptionTime;
        Patient *pNextPatient;  //  Указатель на след. пациента
 
        Patient()
        {
            pNextPatient = 0;
        }
    };
public:
    Patient *pFirstPatient; //  Указатель на первого пациента
    List()
    {
        pFirstPatient = NULL;
    }
    void Add(string inFIO, int inNumOfPolicy, string inSpecialist, string inReceptionTime)
    {
        Patient* pAddingPatient = new Patient;
            pAddingPatient->FIO = inFIO;
            pAddingPatient->numOfPolicy = inNumOfPolicy;
            pAddingPatient->receptionTime = inReceptionTime;
            pAddingPatient->specialist = inSpecialist;
        
        if(pFirstPatient!=NULL) { // если список не пуст,
            GetLast()->pNextPatient = pAddingPatient;   // делаем пациента pAdd последней
        }
        else { //   если список пуст, то добавлем данные в начало списка.
            pFirstPatient = pAddingPatient;
        }
    }
    Patient* GetLast()
    {
        Patient *pCurrentPatient = pFirstPatient;   //  Указатель на очередные данные в списке.
        if(pCurrentPatient == NULL) {// Если список пуст, то возвращаем NULL.
            return NULL;
        }
        while(pCurrentPatient->pNextPatient!=NULL) {// Пока есть следующий элемент списка переводим указатель на следующий
            pCurrentPatient = pCurrentPatient->pNextPatient;
        }
        return pCurrentPatient;
    };
    void ShowAll()
    {   
        Patient *pCurrentPatient = pFirstPatient;   //  Указатель на очередные данные в списке.
        if(pCurrentPatient == NULL) {// Если список пуст, то это и напишем.
            cout << "Empty" << endl;
            getchar();
        }
        else
        {
            // Пока есть следующий элемент списка.
            do  {   // Выводим на консоль очередной элемент.
                cout << pCurrentPatient->FIO << endl <<
                        pCurrentPatient->numOfPolicy << endl <<
                        pCurrentPatient->specialist << endl <<
                        pCurrentPatient->receptionTime << endl << endl;
                }
            while((pCurrentPatient = pCurrentPatient->pNextPatient)!=NULL); // Переводим pCurr на следующий элемент в списке.
                                                                            // Если он равен NULL, то заканчиваем.
            getchar();
        }
        getchar();
    }   
 
};
 
                
 
int main()
{   
    List *pList = new List;
    pList->Add("Ivanov",1234,"Surgeon","31.10.2008 09:20");
    pList->Add("Petrov",5678,"Surgeon","31.10.2008 09:30");
    pList->Add("Sidorov",91011,"Surgeon","31.10.2008 09:40");
    pList->ShowAll();
    getchar();  //  Заглушка.
    return 0;
}
Venera
7 / 6 / 1
Регистрация: 31.10.2008
Сообщений: 92
31.10.2008, 16:47  [ТС]     Структура в классе, это возможно? #4
Спасибо большое, что помог
Inlight, объясни пожалуйста, зачем нужен в структуре указатель на следующее поле?
C++
1
2
3
4
Patient()
{
    pNextPatient = NULL;
}
Это типа конструктора структуры или выделение памяти???
И еще интересно, ты обращаешься к GetLast() еще не описав саму функцию, и нигде ее не объявив, это особенности класса?
Inlight
43 / 42 / 2
Регистрация: 17.09.2008
Сообщений: 98
31.10.2008, 17:29     Структура в классе, это возможно? #5
зачем нужен в структуре указатель на следующее поле
Он хранит адрес следующего элемента-пациента. Если пациент в списке один, то оно равно 0, а если не один, то 1-й указывает на 2-го, 2-й - на 3-го и т.д до последнего. У последнего указатель на следующего тоже равен 0. Как-бы цепочка получается. А адрес первого пациента храниться в классе - указатель *pFirstPatient.

Это типа конструктора структуры или выделение памяти???
Конструктор. Когда создаёшь нового пациента он ни на кого не может указывать, поэтому ставится указатель сразу инициализируется 0-м.

И еще интересно, ты обращаешься к GetLast() еще не описав саму функцию, и нигде ее не объявив, это особенности класса?
Объявление (и сразу реализация) функции GetLast() в классе есть - посмотри, между void Add(string inFIO, int inNumOfPolicy, string inSpecialist, string inReceptionTime) и void ShowAll() - там есть Patient* GetLast().
Dendern
0 / 0 / 0
Регистрация: 22.02.2017
Сообщений: 5
22.02.2017, 16:23     Структура в классе, это возможно? #6
Привет! Наткнулся на тему спустя столько лет! У меня подобная задача, только интересует, как можно вносить изменения в структуру с клавиатуры? Заранее спасибо!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2017, 16:30     Структура в классе, это возможно?
Еще ссылки по теме:
Возможно ли это заменить циклом? C++
Как это возможно сделать? C++
C++ Partition для map. Возможно ли это?
C++ Заменить оператор goto на цикл, если это возможно

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

Или воспользуйтесь поиском по форуму:
rikimaru2013
C++ Game Dev
2399 / 1093 / 237
Регистрация: 30.11.2013
Сообщений: 3,620
22.02.2017, 16:30     Структура в классе, это возможно? #7
Dendern,
C++
1
2
3
4
5
6
7
8
9
struct Person
{
    int m_age;
};
int main()
{
    Person mySelf;
    std::cin >> mySelf.m_age;
}
Yandex
Объявления
22.02.2017, 16:30     Структура в классе, это возможно?
Ответ Создать тему
Опции темы

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