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

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

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

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

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

У меня такая проблема, нужно реализовать объект-список. В нем необходимо реализовать методы обеспечивающие полную функциональность списка.
Затем написать программу по работе с данным списком. Мне нужно вести пациентов в поликлинике, Ф.И.О., № полиса, к какому специалисту направляется, дата и время приема. Я написала структуру, прямо в классе, а вот как теперь обращаться к элементам структуры, как им параметры передавать не могу придумать. Вообще может не нужно структуру в класс записывать, тогда посоветуйте другой вариант, а то уже 3 день не могу придумать.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2008, 04:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Структура в классе, это возможно? (C++):

Структура в классе - C++
Здраствуйте! Хотел спросить можно ли использовать структуру в классе и соответствует ли оно принципам ООП? #include <iostream> ...

Структура в классе (из метода увидеть переменную) - C++
class Records { public: int Count; struct Param { public: __property unsigned int index = {write =...

Уничтожается структура данных в наследуемом классе - C++
Здравствуйте. У меня в ходе написании программы появилась проблема. У меня почему то не сохраняется структура. Здесь я привел текс...

Что это структура? - C++
Как выделенные переменные(или не переменные?, что это?) связанны междус собой? Слева переменная справа тип,значение? p.s: не...

Получается структура в С++ - это класс? - C++
Элементами или полями структуры могут быть переменные, массивы, ранее определенные структуры. Функции не могут быть полями структуры (В...

Возможно ли это на с++? - C++
Допустим есть класс class MyBool{ int data; //Читаем бит номер num bool GetVal(num){return data&(1<<num);} //Записываем в бит...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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
Привет! Наткнулся на тему спустя столько лет! У меня подобная задача, только интересует, как можно вносить изменения в структуру с клавиатуры? Заранее спасибо!
rikimaru2013
C++ Game Dev
2429 / 1123 / 240
Регистрация: 30.11.2013
Сообщений: 3,673
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2017, 16:30
Привет! Вот еще темы с ответами:

Статическая структура в классе: Неразрешенный внешний символ - C++
Решил создать класс со статической структорой, выдает ошибку Ошибка 1 error LNK2001: неразрешенный внешний символ &quot;&quot;public: static struct...

Динамическая структура данных. Что это? - C++
В требованиях к одной вакансии Динамическая структура данных. Цитата из Прата С. 189 стр.: &quot;Инструментом для этого, опять-таки,...

Как это возможно сделать? - C++
Как это сделать на с++

Возможно ли это заменить циклом? - C++
Здравствуйте! Подскажите, как этот фрагмент, можно заменить циклом? ... cout &lt;&lt; &quot;Введите количество часов: &quot;; cin &gt;&gt; hours1 &gt;&gt;...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.02.2017, 16:30
Ответ Создать тему
Опции темы

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