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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 5.00
Padonok
14 / 14 / 1
Регистрация: 01.02.2009
Сообщений: 23
#1

<list> - C++

28.04.2010, 14:05. Просмотров 2563. Ответов 7
Метки нет (Все метки)

Подскажите как вызвать функцию объекта помещенного в список?
У меня есть абстрактный класс Book от него производный класс Science
list<Book*>book;

Book * science = new Science();

Всем полям присвоил значение

book.push_back(science);

У меня в классе есть функция вывод на экран всех значеней полей print()
Как обратиться к функции print со списка? (типо science->print() )
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2010, 14:05     <list>
Посмотрите здесь:

Преобразование списка list в *list - C++
Здравствуйте я создал список (массив списков), но не могу вытащить элементы этого списка (т.е. , к примеру : mas=список из несколько...

list - C++
Здравствуйте, уважаемые форумчане. #include &lt;iostream.h&gt; #include &lt;list&gt; #include &lt;conio.h&gt; template &lt;class T&gt; class Array {...

класс List - C++
Здравствуйте! пытаюсь создать шаблонный класс List //List.h #ifndef LIST_H #define LIST_H template &lt;class T&gt; class List ...

List и Set - C++
В общем у нас есть отрезок от 1 до X. Отсортировать этот отрезок, вида: (1,х,2,х-1,...). Заполнить этой последовательностью list и set. И...

list sort() - C++
Подскажите пожалуйста. Есть упрощенный класс class NOTE { public: char name; char surname; char phoneNumber; ...

list.merge( - C++
// list_merge.cpp // compile with: /EHsc #include &quot;stdafx.h&quot; #include &lt;list&gt; #include &lt;iostream&gt; int main( ) { ...

STL List - C++
Вот в чем проблема, была дана задача, решить которую надо было с помощью Deque и List, Deque надобыло оформить через STL, а List написать...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Hell Knight
230 / 84 / 3
Регистрация: 11.03.2010
Сообщений: 290
28.04.2010, 14:21     <list> #2
а попробуй так:
C++
1
book[i].print();
я незнаю как с list, но с vector
вроде так можно обращаться...
Padonok
14 / 14 / 1
Регистрация: 01.02.2009
Сообщений: 23
28.04.2010, 14:31  [ТС]     <list> #3
Цитата Сообщение от Hell Knight Посмотреть сообщение
а попробуй так:
C++
1
book[i].print();
я незнаю как с list, но с vector
вроде так можно обращаться...
не работает (
Hell Knight
230 / 84 / 3
Регистрация: 11.03.2010
Сообщений: 290
28.04.2010, 14:47     <list> #4
а можно код, как это всё объявляется ?
Roma_F
331 / 246 / 5
Регистрация: 13.12.2009
Сообщений: 589
28.04.2010, 15:31     <list> #5
C++
1
2
3
4
5
6
std::set<Book *>::iterator it = sel_k.begin();
while (it != sel_k.end())
{
    (*it)->print();
    it++;
}
Padonok
14 / 14 / 1
Регистрация: 01.02.2009
Сообщений: 23
28.04.2010, 16:39  [ТС]     <list> #6
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
221
222
223
224
225
226
227
228
229
230
231
232
233
234
#include <iostream>
#include <algorithm>
#include <list>
#include <string>
#include <windows.h>
 
using namespace std;
 
 
class DATA{
public:
    void SetName(string name) { itsName = name;}
    void SetYear(int year)    { itsYear = year;}
    void SetPrice(int price) { itsPrice = price;}
    void SetAuthor(string author) { itsAuthor = author;} 
    string GetName() { return itsName;}
    void print();
private:
    string itsName;
    string itsAuthor;
    int itsYear;
    int itsPrice;
};
void DATA::print(){
    cout << "Name: " << itsName << endl;
    cout << "Author: " << itsAuthor << endl;
    cout << "Year: " << itsYear << endl;
    cout << "Price: " << itsPrice << endl;
}
 
class Book{
public:
    virtual void SetName(string name)=0; // имя книги
    virtual void SetYear(int year)=0; // год издания книги
    virtual void SetPrice(int price)=0; // цена книги
    virtual void SetAuthor(string author)=0; // автор книги
    virtual string GetName()=0;
    virtual void print()=0; // вывод
};
 
class Science : public Book{
public:
    void SetName(string name) { data.SetName(name); }
    void SetYear(int year) { data.SetYear(year); }
    void SetPrice(int price) { data.SetPrice(price); }
    void SetAuthor(string author) { data.SetAuthor(author); }
    string GetName() { return data.GetName(); }
    void print() { data.print(); }
 
protected:
    DATA data;
};
 
class Directory : public Science{
public:
    void SetType(string type) { itsType = type;} // Словарь, Энциклопедия
    void display() { cout << "Type: " << itsType << endl;}
private:
    string itsType;
 
};
 
class Fiction : public Book{
public:
    void SetName(string name) { data.SetName(name); }
    void SetYear(int year) { data.SetYear(year); }
    void SetPrice(int price) { data.SetPrice(price); }
    void SetAuthor(string author) { data.SetAuthor(author); }
    string GetName() { return data.GetName(); }
    void print() { data.print(); }
 
protected:
    DATA data;
};
 
class Drama : public Fiction{
public:
    void SetType(string type) { itsType = type;} // тип текста: Проза, Роман, Стих
    void SetPeriod(string period) { itsPeriod = period; } // литература по периодам: Античная, Средневековья, Ренессанс, Модерн, Постмодерн
    void display() { cout << "Type: "  << itsType << endl;
                     cout << "Period: " << itsPeriod << endl; 
    }
private:
    string itsType;
    string itsPeriod;
};
 
 
int main(){
    setlocale( LC_ALL,"Russian" );
    list<Book*>book;//список
    list<Book*>::iterator p;
    bool menu = true;
    int year;
    int price;
    string name;
    string author;
 
    
    while(menu){
        int choice;
        system("cls");
        system("color A");
        cout << "*****Меню*****\n";
        cout << "(1)Создать объект\n";
        cout << "(2)Удалить объект\n";
        cout << "(3)Изменить параметры объекта\n";
        cout << "(4)Вывод\n";
        cout << "(5)Выход\n";
        cout << endl;
        cin >> choice;
        switch(choice){
            case 1:{
                system("cls");
                cout << "*****Меню*****\n";
                cout << "(1)Создать Science\n";
                cout << "(2)Создать Directory\n";
                cout << "(3)Создать Fiction\n";
                cout << "(4)Создать Drama\n";
                cout << "(5)Выход\n";
                cin >> choice;
                switch(choice){
                    case 1: {
                        Book * science = new Science();
                        cout << "Название книги: ";
                        cin >> name;
                        science->SetName(name);
                        cout << "\nАвтор: ";
                        cin >> author;
                        science->SetAuthor(author);
                        cout << "\nГод издания: ";
                        cin >> year;
                        science->SetYear(year);
                        cout << "\nЦена: ";
                        cin >> price;
                        science->SetPrice(price);
                        book.push_back(science);// помещения объекта в список
                        
                    }
                    break;
                    case 2: {
                        Book * directory = new Directory();
                        cout << "Название книги: ";
                        cin >> name;
                        directory->SetName(name);
                        cout << "\nАвтор: ";
                        cin >> author;
                        directory->SetAuthor(author);
                        cout << "\nГод издания: ";
                        cin >> year;
                        directory->SetYear(year);
                        cout << "\nЦена: ";
                        cin >> price;
                        directory->SetPrice(price);
                        book.push_back(directory);
                             
                    }
                    break;
                    case 3: {
                        Book * fiction = new Fiction();
                        cout << "Название книги: ";
                        cin >> name;
                        fiction->SetName(name);
                        cout << "\nАвтор: ";
                        cin >> author;
                        fiction->SetAuthor(author);
                        cout << "\nГод издания: ";
                        cin >> year;
                        fiction->SetYear(year);
                        cout << "\nЦена: ";
                        cin >> price;
                        fiction->SetPrice(price);
                        book.push_back(fiction);
                             
                    }
                    break;
                    case 4: {
                        Book * drama = new Drama();
                        cout << "Название книги: ";
                        cin >> name;
                        drama->SetName(name);
                        cout << "\nАвтор: ";
                        cin >> author;
                        drama->SetAuthor(author);
                        cout << "\nГод издания: ";
                        cin >> year;
                        drama->SetYear(year);
                        cout << "\nЦена: ";
                        cin >> price;
                        drama->SetPrice(price);
                        book.push_back(drama);
                             
                    }
                    break;
                   case 5: break;
                }
            }
                
                   
            case 2: {
                int tmp = book.empty();
                if(tmp){ // проверка наличия объектов в списке
                    cout << "Список объектов пустой" << endl;
                    Sleep(1000);
                }
                
 
            }
                    break;
            case 3: break;
            case 4: {
                int tmp = book.empty();
                if(tmp){ // проверка наличия объектов в списке
                    cout << "Созданных объектов нет" << endl;
                    Sleep(1000);
                }
                else{
                    
                    Sleep(1000);
                }
 
            }
                    break;
            case 5: menu = false; break;
            default: {
                cout << "Попробуйте еще раз\n"; 
                     Sleep(1000);
            }
                     break;
        }
    }
    
    return 0;
}
Добавлено через 26 минут
Цитата Сообщение от Roma_F Посмотреть сообщение
C++
1
2
3
4
5
6
std::set<Book *>::iterator it = sel_k.begin();
while (it != sel_k.end())
{
    (*it)->print();
    it++;
}

спасибо)))

Добавлено через 41 минуту
А как можно реализовать удаление со списка по имени книги.
C++
1
2
3
4
5
6
7
8
9
10
11
12
cout << "Имя книги: ";
string N,T;
cin >> N;
list<Book*>::iterator it=book.begin();
while(it != book.end()){
     T=(*it)->GetName();
     if(T == N){
        cout << "ok" << endl;
    book.erase(it);
     }
     it++;
}
Оно то удаляет но после удаления программа рушится (((
Roma_F
331 / 246 / 5
Регистрация: 13.12.2009
Сообщений: 589
28.04.2010, 18:10     <list> #7
должно работать
C++
1
2
3
4
5
6
7
8
9
10
while(it != book.end()){
     T=(*it)->GetName();
     if(T == N){
        cout << "ok" << endl;
        delete *it;
        book.erase(it);
        break;
     }
     it++;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2010, 21:33     <list>
Еще ссылки по теме:

Контейнер list - C++
Дорогие форумчане! Использую в проге list из STL. При попытке ... я даже не знаю как обозвать это, поэтому вот кусок кода функции: ...

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

Контейнеры list - C++
Здравствуйте! Такой вопросик есть: Если у меня имеется такая штука list&lt;int&gt; *adj; - в классе this -&gt; V=V; adj = new list&lt;int&gt; ;...

STL list - C++
Доброго времени суток, пока имею поверхностное представление о алгоритмах STL и функциях для контейнеров, но есть задача: требуется...

List STL - C++
В общем нужно создать класс STL c помощью list: CStudent.h #include &lt;string&gt; using namespace std; enum number_type{G1, G2,...


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

Или воспользуйтесь поиском по форуму:
Padonok
14 / 14 / 1
Регистрация: 01.02.2009
Сообщений: 23
28.04.2010, 21:33  [ТС]     <list> #8
Цитата Сообщение от Roma_F Посмотреть сообщение
должно работать
C++
1
2
3
4
5
6
7
8
9
10
while(it != book.end()){
     T=(*it)->GetName();
     if(T == N){
        cout << "ok" << endl;
        delete *it;
        book.erase(it);
        break;
     }
     it++;
}
благодарен за помощь
Yandex
Объявления
28.04.2010, 21:33     <list>
Ответ Создать тему
Опции темы

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