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

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

Войти
Регистрация
Восстановить пароль
 
tatsu
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 3
#1

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

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

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

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

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

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

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

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

Еще вариант.. поиск пути (волновой алгоритм) разместить в классе лабиринта но тогда класс мыши должен знать указатель на класс созданного лабиринта. И при этом функция поиска пути должна возвращать классу мыши массив пути (массив последовательных шагов мыши по лабиринту).
Насколько мне известно, в данном случае прийдется в функцию передать пустой указатель (неразмеченный массив пути), но ведь если я массив создам в сторонней функции а потом передам назад указатель на него ЭТО НЕ ЕСТЬ ХОРОШО?? Ведь вродебы массив при выходе из функции удалиться или я не прав??
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2009, 03:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запутался в классах (( (C++):

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

Массив(запутался) - C++
Знаю правила, прошу помощи. " Пример массива и дополнительных переменных приведены ниже: { 1.2, -1.8, -4.5, 8.5, -0.1, -0.9, 9.7,...

Запутался с индексами - C++
Привет, немного запутался в своем же коде (который работает на ура). Создал функцию, которая разделяет текст на слова и возвращает...

Запутался в Рекурсии - C++
int f(unsigned no, unsigned div) { if (!no) return div; if (!div) div=1; if (no % 2) return div + f(no/div,...

запутался с length - C++
вот если сделать так #include <iostream> #include <string> using namespace std; int main () { string str= "C++ is...

Запутался в флагах - C++
Запутался в флагах, переменная rez вычисляется некорректно. Подскажите, как избавиться от ошибки, а ещё лучше, показать правильный код...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
NightmareZ
1340 / 563 / 37
Регистрация: 31.03.2009
Сообщений: 1,919
29.04.2009, 04:59 #2
Зачем тебе вообще класс мыши нужен?
0
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
29.04.2009, 05:44 #3
каковы задачи классов?
какие данные хранит класс mouse?
0
Deicider
96 / 52 / 1
Регистрация: 18.03.2009
Сообщений: 273
29.04.2009, 09:30 #4
Цитата Сообщение от tatsu Посмотреть сообщение
Проблема в том что массив находиться в классе лабиринта и класс мыши этот массив не знает. Как правильнее передать данные массива из одного класса в другой?
Просто передать указатель на массив и его размеры мыши или нет???
.....
Ведь вроде бы массив при выходе из функции удалиться или я не прав??
В классе лабиринт создавай массив в динамической памяти и тогда в класс мыши передавай указатель на него. Если так делать, то массив будет существовать всё время жизни программы (если ты его сам не удалишь ранее).
Но такой подход, как ты заметил, "не есть хорошо", так как нарушается один из принципов объектно-ориентированного программирования, а именно, инкапсуляция.
Можно сделать что-то в таком духе: в классе лабиринта реализовать функцию, которая будет выдавать информацию о том месте, где стоит мышь, а именно: в функцию передаются координаты мыши, а возвращается 4 значения (можно реализовать посредством передачи в функцию ссылок, либо посредством битовых операций, устанавливая соответствующие биты в возвращаемом значении), например: в клетке справа - стенка, слева - проход, спереди - стенка, сзади - проход (то есть мышь может сделать шаг либо налево, либо назад). Таким образом мышь сможет получать инфу о лабиринте, не имея доступа к непосредственно массиву.
0
tatsu
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 3
29.04.2009, 18:24  [ТС] #5
Цитата Сообщение от 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.04.2009, 18:24
Привет! Вот еще темы с ответами:

Запутался в типах - C++
Как правильно указать типы для вывода нормального, верного ответа? Как правильно задерживать консоль? #include <iostream> #include...

Со стеком запутался - C++
Как сделать чтоб это заработало Компилирую на CodeBlocks (если есть лучше предлагайте) #include <iostream> #include <string.h> ...

Запутался в цикле - C++
Сначала идет все, как нужно. Символы не подлежат вводу (что мне и нужно). Но когда ввожу число из нужного диапазона , пишет, что оно не...

Запутался в циклах - C++
Вроде бы все сделал правильно но есть ошибка Заполняю массив рандомными числами потом скалдываю все числа массива и записую результат в...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.04.2009, 18:24
Ответ Создать тему
Опции темы

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