Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 13.11.2012
Сообщений: 14

Основы ООП. Создание стека через класс

22.02.2013, 19:24. Показов 4046. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех пользователей форума. Относительно недавно начал осваивать ООП. Было необходимо выполнить следующее задание : нужно описать класс реализующий стек на примере формирования ж/д состава вагоны которого могут быть 2 типов. Конечно же есть некоторый жуткий прототип. Прошу уважаемых пользователей помочь мне в выявлении и пояснении этих ошибок. Среда Билдер. Вот прототип:
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
#include <iostream.h>
class steck 
 {
  public:
  bool t;
  steck *next;
  void vstavka(steck *d,bool x)
 {
   steck *p=new steck;
   p.t=x;
   p.next=*d;
   d=p;
 }
  void del(steck *d)
 {
  steck *p=d;
  d=d.next;
  delete p;
 }
  void prosmotr_el(steck d)
 {
  int i;
  for(;;)
 {
  i++;
  cout<<"vagon"<<i<<"tip vagona"<<d.t<<"\n";
  d=d.next;
 }
 }
  void poisk(steck *d,int j)
 {
  for(int i;i<j+1;i++) *d=*d.next;
 }
 };
main()
 {
  char n;
  steck *top;
  bool x;
  int d;
  for(;;)
 {
  cout<<"viberete deystvie\n";
  cout<<"1:sozdanie sostava i dobavka vagonov\n";
  cout<<"2:udalenie vagona\n";
  cout<<"3:prosmotr sostava\n";
  cout<<"q:vihod iz programmi\n";
  cin>>n;
  switch(n)
 {
 case '1':
   steck a;
   a.t=true;
   *top=&a;
   cout<<"sostav sozdan, viberete chislo vagonov i ih tip, perviy vagon po umolchaniyu - locomotiv\n";
   cin>>d;
  for(int i;i<d;i++)
 {
   cout<<"viberete vid vagona\n";
   cin>>x;
   a.vstavka(top,x);
 }
   break;
 case '2':
   cout<<"viberete nomer vagona\n";
   cin>>d;
   a.poisk(*top,d);
   a.del(*top);
   break;
 case '3':
   a.prosmotr_el(a);
   break;
 case 'q':
 return 0;
 }
 }
 }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.02.2013, 19:24
Ответы с готовыми решениями:

ООП Создание основы класса
Здравствуйте, получил задание, но немного недопонимаю как это сделать, с чего начать. Помогите пожалст или объясните образно как сделать, а...

Основы ООП. Создать класс МФУ. От кого мне лучше "унаследоваться"?
Приветствую! Для практического закрепления 5й главы Хорстманна решил сделать такую программку Суперкласс - class ОргТехника { ...

Изучаю Python, сейчас учу основы ООП, где можно найти задачи по ООП
Скиньте пожалуйста источники с задачами(желательно на русском)

5
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
22.02.2013, 19:41
Voron55555, если имеется указатель на объект, как например, steck *p, то обращаться к элементам объекта нужно так:

C++
1
2
3
p->t;
// или
(*p).t;
2
0 / 0 / 0
Регистрация: 13.11.2012
Сообщений: 14
22.02.2013, 20:52  [ТС]
Спасибо. К сожалению, еще не затронул данный матерьял в ООП.
0
0 / 0 / 0
Регистрация: 13.11.2012
Сообщений: 14
28.02.2013, 16:27  [ТС]
Что то все равно ничерта не пропускает компилятор. Вопрос по поводу кода: если я реализую указатель класса у которого полем является указатель, то синтаксис верен или мне нужно отдельно вносить в скобки и указатель и отдельно поле данного класса (которое является указателем)?
0
...
 Аватар для anmartex
1910 / 1329 / 966
Регистрация: 12.02.2013
Сообщений: 2,172
28.02.2013, 19:29
Ну, приступим:

Строка 4, 5: нарушение инкапсуляции. Вы открыли сакральную часть класса.
Строка 7: зачем вы передаёте первым параметром стек? Сам класс является стеком (вернее объект данного класса), и именно в него должно быть добавление. Кроме этого, вы передаёте указатель d, который изменяете внутри метода, но из вне он не поменяется. И такой метода в определении стека обычно называют push (но это так, для информации).
Строка 14: аналогично строке 7, а именно, зачем передаёте стек? Объект класса stack и есть сам стек. И опять, значение указателя d поменяется только локально. (Такой метод обычно называют pop)
Строка 20: тут мы уже передаём d по значению. Я логику слабо улавливаю: 1 - зачем его вообще передавать; 2 - почему по значению, а не по указателю?
Строка 23: а какое условие выхода из этого цикла?
Строка 30: вечный вопрос, зачем передаём стек?
Строка 32: 1 - зачем разадресовываем d и присваиваем ему разадресованный next; 2 - а если d уже NULL, а j ещё не 0?; 3 - какой должен быть результат этого поиска?
Строка 35: я понимаю, что вы пользуетесь военным борландом, но всё же main должен что-то вернуть.
Строка 38: вы объявили стек, но даже не задали ему NULL. Прямая тропинка выстрелить себе в ногу. И это кстати будет если вы выберите команду 2 или 3 своей программы.
Строка 52: гениально, вы вспомните про время жизни переменных, правильно, в районе операторных скобок, а что мы видим в строке 54? А мы там видим как такая переменная разадресовывается и её адрес присваивается указателю top.

То, что нужно подтянуть:
  1. Понимание класса в целом. Вы в своём коде просто объединили переменные и функции (и даже не связали их вместе)
  2. Понимание указателя. Вы вообще не ориентируетесь, что такое указатель и как с ним работать.

P.S.: Пожалуйста, только без обид. Вы всё правильно делаете, что стараетесь. Но вы не думали, что может сначала посмотреть, как это реализовывают другие (в книгах, статьях, форумах)?
1
0 / 0 / 0
Регистрация: 13.11.2012
Сообщений: 14
28.02.2013, 19:36  [ТС]
Да что ты уважаемый? Я же искренне рад критике, так как кроме пользователей ресурса меня некому поставить на истинный путь. Спасибо тебе огромное за помощь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.02.2013, 19:36
Помогаю со студенческими работами здесь

Создание класс для работы с хеш-таблицей на основе массива стека
Работаю в программе borland c++ builder 6 Получил задание Не знаю как реализовать идею В методичке был такой код(сама методичка...

Создание стека состояний через vector
Почему компилятор ругается на такое выражение? #include &lt;vector&gt; #pragma once class AI { public: AI(void); ~AI(void); ...

Основы ООП [С++]
Немного знаю Java, написал программу которая по заданным 2-м сторонам и углом между нимию Попробовал перевести на С++ #include...

Основы ООП
Не могу понять некоторые вещи. Постараюсь задавать вопросы последовательно . import java.util.*; /** * This program tests the...

Основы ООП
Здраствуйте! Уже второй день пытаюсь разобраться и хорошего ответа так и не нашел. На форуме подобные вопросы видел, и википидею читал, но...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru