| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Как сделать взаимодействие между классами |
| Автор: VolgaevLG 6.6.2011, 20:59 |
| Товарисчи! помогите у меня в будущей игре (подобие змейки) есть два класса class GameField { int x; // координата х игрового поля int y; // координата y игрового поля int width; // ширина и int height; // высота, кароче параметры }; и class GameSnake { void DrawSnake() { // А здесь мне необходимо обратиться к вышеуказанным переменным первого класса } }; Подскажите как это лучше сделать с профессиональной точки зрения |
| Автор: awesome 6.6.2011, 23:40 | ||
|
| Автор: JЕT 6.6.2011, 23:52 |
| Сделать композицию. |
| Автор: Dem_max 7.6.2011, 09:15 |
| во тут предложены множество вариантов http://forum.sources.ru/index.php?showtopic=331588 |
| Автор: mes 7.6.2011, 13:30 | ||
к переменным полям класса обращаться можно.. полям класса в ООП соответсвуют статические дата члены в С++ и чего это я сегодня такой придирчивай |
| Автор: borisbn 7.6.2011, 13:46 |
| mes, но у ТС не было слова static в описании... |
| Автор: baldina 7.6.2011, 14:28 | ||
Змейка ползает по полю (змейка знает о поле, поле о змейке - нет). Из вопроса, как классу змейки обратиться к классу поля это тоже вытекает. Что бы змейка знала о поле, ей надо об этом сообщить. Например конструкторе. Дальше змейка будет хранить ссылку на поле для своих операций.
|
| Автор: mes 7.6.2011, 14:36 | ||
мм.. а знает ли она о поле ? а может она и о правилах в курсе ? |
| Автор: Nostr 7.6.2011, 17:16 | ||
Можно сделать класс дружественным, можно сделать методы, которые будут возвращать параметры объекта
|
| Автор: VolgaevLG 7.6.2011, 17:38 | ||||
| друзья, я не верно задал вопрос, это в принципе мне понятно, но из следующих вариантов: 1. сделать класс GameSnake дружественным к классу GameField, через конструктор класса GameSnake передать адрес созданного объекта GameField и получить к ним доступ
2. Обойтись без friend, сделав необходимые параметры в классе GameField публичными, а остальное, аналогично прошлому примеру 3. "можно сделать методы, которые будут возвращать параметры объекта", как посоветовал Nostr
как будет грамотней с точки зрения профессионального программирования, как бы сделал программист, а не "быдлокодер" И исчо вопросы: что такое композиция? почему GameField лучше сделать структурой, я просто реализовываю функцию прорисовки поля через класс GameField, если сделать структурой, то удобнее будет обращаться? тогда куда запихнуть функцию прорисовки поля |
| Автор: borisbn 7.6.2011, 17:43 |
| Nostr, твоя ф-ция даже компилироваться не будет. Я не до коеца знаю stl, поэтому объясни как в конструктор вектора можно запихать два элемента? Добавлено через 14 минут и 33 секунды VolgaevLG, класс с общепринятой точки зрения должен содержать методы, управляющие его поведением. Если же в классе только (извиняюсь за подробности) члены, то логично сделать из него структуру, где все поля будут паблик |
| Автор: mes 7.6.2011, 18:36 | ||
псевдокодом, надеюсь не запутаю
Добавлено через 2 минуты и 4 секунды просисовка должна принадлежать окну, на котором Вы рисуете , либо выделена (или только частью) в отдельный класс рисовальщика.. размазывать отрисовку по коду очень не желательно.. |
| Автор: VolgaevLG 7.6.2011, 18:40 |
| Благодарю, это все что я хотел узнать |
| Автор: mes 7.6.2011, 18:41 |
| связывать объекты _сцены_ между собой (посредством ссылок) также нежелательно, так как их поведение взаимозависимо, и лучше вынести логику в отдельный класс, в нашем случае Playing.. Добавлено через 1 минуту и 42 секунды в псевдокоде использовано struct для простоты.. пишите что Вам больше подойдет.. |
| Автор: VolgaevLG 7.6.2011, 19:17 |
| |
| Автор: Nostr 8.6.2011, 05:54 | ||||
Это псевдокод. Я имел ввиду какой-нибудь самописный вектор.
ну или типа того... Конечно же можно STL использовать. Кому как удобнее )) Я вот |
| Автор: Леопольд 8.6.2011, 15:08 | ||||
|
| Автор: borisbn 8.6.2011, 16:36 |
| Леопольд, я, наверное, неправильно выразился. Нужно было сказать как в конструктор вектора можно запихать два разных элемента ? Думаю здесь имелось в виду не что, this->x это кол-во, а this->y значение по-умолчанию... Nostr уже сказал, что это псевдокод, поэтому дальнейшее - вода в ступе. IMHO. |
| Автор: Леопольд 9.6.2011, 14:08 |
| borisbn, я имел ввиду что скомпиляется без проблем, только делать будет не то... |