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

Запутался в классах ((

29.04.2009, 03:58. Показов 1098. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1) Есть класс лабиринта "Maze". В нем расположен 2-ух мерный массив. Он генерируется процедурой в классе.

2) Есть класс мыши "Mouse". В этом классе должны распологаться процедуры нахожнения минимального пути из точки А лабиринта в точку Б.

Лабиринт генерируется по "методу сечений". Мышь будет искать путь по "волновому алгоритму".

Проблема в том что массив находиться в классе лабиринта и класс мыши этот массив не знает. Как правильнее передать данные массива из одного класса в другой?
Просто передать указатель на массив и его размеры мыши или нет???
Подскажите пожалуйста как правильнее это оформить.

Запутался потому что вариантов напрашивается много и все какието плоские.. Опыта в этом деле не хватает а где взять опыт как не с практики?

Был вариант распологать массив в main.cpp но показался неверным т.к. класс лабиринта на то он и класс чтобы хранить данные о полноценном лабиринте.

Еще вариант.. поиск пути (волновой алгоритм) разместить в классе лабиринта но тогда класс мыши должен знать указатель на класс созданного лабиринта. И при этом функция поиска пути должна возвращать классу мыши массив пути (массив последовательных шагов мыши по лабиринту).
Насколько мне известно, в данном случае прийдется в функцию передать пустой указатель (неразмеченный массив пути), но ведь если я массив создам в сторонней функции а потом передам назад указатель на него ЭТО НЕ ЕСТЬ ХОРОШО?? Ведь вродебы массив при выходе из функции удалиться или я не прав??
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.04.2009, 03:58
Ответы с готовыми решениями:

Запутался в классах и инкапсуляции
Всем привет! Нужно переделать программу в ООП-стиль. Заменить структуры на классы, инкапсулировав туда функции в виде методов. Что-то...

Сильно запутался в структурах и классах
Всем привет! Недавно начал изучать C#, сейчас сильно туплю на теме "Классы и структуры". Я понял, что запись ClassName...

Определить какие из имён встречаются во всех классах, только в некоторых классах, не встречаются ни в одном
1. Заданный имена девочек . Определить , какие из этих имён встречаются во всех классах данной параллели , которые есть только в некоторых...

4
Заблокирован
29.04.2009, 04:59
Зачем тебе вообще класс мыши нужен?
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
29.04.2009, 05:44
каковы задачи классов?
какие данные хранит класс mouse?
0
 Аватар для Deicider
98 / 54 / 3
Регистрация: 18.03.2009
Сообщений: 273
29.04.2009, 09:30
Цитата Сообщение от tatsu Посмотреть сообщение
Проблема в том что массив находиться в классе лабиринта и класс мыши этот массив не знает. Как правильнее передать данные массива из одного класса в другой?
Просто передать указатель на массив и его размеры мыши или нет???
.....
Ведь вроде бы массив при выходе из функции удалиться или я не прав??
В классе лабиринт создавай массив в динамической памяти и тогда в класс мыши передавай указатель на него. Если так делать, то массив будет существовать всё время жизни программы (если ты его сам не удалишь ранее).
Но такой подход, как ты заметил, "не есть хорошо", так как нарушается один из принципов объектно-ориентированного программирования, а именно, инкапсуляция.
Можно сделать что-то в таком духе: в классе лабиринта реализовать функцию, которая будет выдавать информацию о том месте, где стоит мышь, а именно: в функцию передаются координаты мыши, а возвращается 4 значения (можно реализовать посредством передачи в функцию ссылок, либо посредством битовых операций, устанавливая соответствующие биты в возвращаемом значении), например: в клетке справа - стенка, слева - проход, спереди - стенка, сзади - проход (то есть мышь может сделать шаг либо налево, либо назад). Таким образом мышь сможет получать инфу о лабиринте, не имея доступа к непосредственно массиву.
0
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 3
29.04.2009, 18:24  [ТС]
Цитата Сообщение от NightmareZ Посмотреть сообщение
Зачем тебе вообще класс мыши нужен?
Класс мыши нужен для отображения в гафической части программы мыши которая перемещается в лабиринте пошагово с анимацией. Туда я еще закинул планировал закинул алгоритм поиска пути но как мне уже обьяснили это не будет верно.
Путь должен искать сам лабиринт а мышь должна здесь быть только графическим классом.

Добавлено через 1 минуту 49 секунд
Цитата Сообщение от Patch Посмотреть сообщение
каковы задачи классов?
какие данные хранит класс mouse?
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
struct Point
{
 int x, y;
};
 
struct Sizes
{ 
 int w, h;
};
 
class Maze
{
 public:
  Maze(HGE *hgec);
  ~Maze();      
  
  void Generate(int width, int height);
  void Render();
  void SetCellSize(int size);
  void SetRenderBoxPos(int x, int y);
  bool GetRoute(Point *route, int x1, int y1, int x2, int y2);
 private:
  void OuterWalls();
  void Divide(int BX, int BY, int BW, int BH, bool FL);
  HTEXTURE  TEX[16];
  int       **mazebox;
  hgeSprite *Sprite[16];
  HGE       *hge;
  int CellSize;
  Sizes MazeSize;
  Point MazePos;
};
 
class Mouse
{
 public:
  Mouse(HGE *hgec);
  ~Mouse();
 
  void Render();
  void Frame();
  void SetRenderBoxPos(int x, int y);
  void GoToCell       (int x, int y);
  void GoToXY         (int x, int y);
  void SetMouseSize   (int size);
  void SetMousePos    (int x, int y);
  void SetRandomPos();
private:
  HTEXTURE TEX;
  hgeSprite *Sprite[3];
  HGE   *hge;
  Point *route;
  int    RouteSteps;
  short  Doing;
  bool   Step; 
  Point  MousePos,
         MouseGoingPos,
         MazePos;
  Sizes  MazeSize;
  int    MouseSize;
};
Добавлено через 1 минуту 49 секунд
Прошу прощение за отсутствие коментариев, прокоментирован тока cpp модуль а хеадер пока руки не доходили.

Добавлено через 12 минут 20 секунд
Цитата Сообщение от Deicider Посмотреть сообщение
Можно сделать что-то в таком духе: в классе лабиринта реализовать функцию, которая будет выдавать информацию о том месте, где стоит мышь, а именно: в функцию передаются координаты мыши, а возвращается 4 значения (можно реализовать посредством передачи в функцию ссылок, либо посредством битовых операций, устанавливая соответствующие биты в возвращаемом значении), например: в клетке справа - стенка, слева - проход, спереди - стенка, сзади - проход (то есть мышь может сделать шаг либо налево, либо назад). Таким образом мышь сможет получать инфу о лабиринте, не имея доступа к непосредственно массиву.
Большое спасибо! Уже начинаю понемногу разбираться.

Насколько я понимаю, тк. у меня класс лабиринта был динамически создан из главного модуля программы, то чтобы из модуля мыши получить в него доступ (чтобы обращаться к его функциям) нужно знать указатель на созданный класс лабиринта, верно?

Просто както некрасиво чтоли звучит что один модуль не на прямую а через переданный из главной программы обращается к другому модулю. Может их как нибудь по другому "подружить" можно? Хотя наверное подругому дружить лишино смысла.. ведь я не просто должен обращаться к пустому модулю, а к созданному, что размещается в памяти и имеет указатель на его начало в памяти а значит и указатель нужно знать.. Подскажите у кого какие соображенияч пожалуйста.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.04.2009, 18:24
Помогаю со студенческими работами здесь

Определить, какие из этих имен встречаются во всех классах, какие есть хотя бы в двух классах, и какие - только в одном классе
Для каждого из четырех классов указаны имена девочек, обучающихся в них. Определить, какие из этих имен встречаются во всех классах, какие...

Заданы имена девочек. Определить, какие встречаются во всех классах, которые есть только в некоторых классах и какие не встречаются
Заданы имена девочек. Определить, какие из этих имен встречаются во всех классах данной параллели, которые есть только в некоторых классах...

какие из этих имен встречаются во всех классах данной параллели которые есть только в некоторых классах и какие из этих имен не встречаются ни в одном
Помогите написать программу: заданы имена девочек определить какие из этих имен встречаются во всех классах данной параллели которые есть...

IF ELSE-запутался
Здравствуйте! При нажатии кнопки Buttun если в Edit ввели 4 то действие 1, если неравно 4 то действие 2. А если в Edit ничего не...

Я запутался:)
Здравствуйте, помогите разобраться почему не работает условие, программа не компилируется...:( procedure TForm1.TX1KeyUp(Sender:...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru