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

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

22.02.2013, 19:24. Показов 4141. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru