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

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

22.02.2013, 19:24. Показов 4096. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru