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

Получить доступ к родительскому классу - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.88
Dmitry99
1 / 1 / 0
Регистрация: 11.11.2011
Сообщений: 9
28.12.2011, 13:10     Получить доступ к родительскому классу #1
Есть класс;
C++
1
2
3
4
5
6
7
8
9
10
11
12
class slave{
void print();
};
 
 
class master{
private:
 Slave a;
public:
void print();
 
};
Как из
C++
1
slave::print()
вызвать метод
C++
1
master::print()
?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.12.2011, 13:11     Получить доступ к родительскому классу #2
Dmitry99, Не узрел наследования. Дабы вызвать перекрытый в потомке метод базового класса, достаточно вызвать этот метод полностью квалифицировав, т.е. в данном случае
C++
1
master::print()
при условии, что slave наследуется от master.
Dmitry99
1 / 1 / 0
Регистрация: 11.11.2011
Сообщений: 9
28.12.2011, 13:13  [ТС]     Получить доступ к родительскому классу #3
Цитата Сообщение от ForEveR Посмотреть сообщение
Dmitry99, Не узрел наследования. Дабы вызвать перекрытый в потомке метод базового класса, достаточно вызвать этот метод полностью квалифицировав, т.е. в данном случае
C++
1
master::print()
при условии, что slave наследуется от master.
Они не наследуются. Я просто не удачно выбрал названия методов.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.12.2011, 13:20     Получить доступ к родительскому классу #4
Dmitry99, Как вы из slave собрались вызвать метод класса master, если slave о нем ничего не знает и функция print не является статической?
Ну и главный вопрос. А зачем?
Dmitry99
1 / 1 / 0
Регистрация: 11.11.2011
Сообщений: 9
28.12.2011, 13:30  [ТС]     Получить доступ к родительскому классу #5
Цитата Сообщение от ForEveR Посмотреть сообщение
Dmitry99, Как вы из slave собрались вызвать метод класса master, если slave о нем ничего не знает и функция print не является статической?
Ну и главный вопрос. А зачем?
У меня есть класс - игровое поле. и класс монстр. В классе игра есть динамический массив типа монстр.
Класс игры содержит в себе лабиринт и метод, который сообщает о наличии стены в конкретном месте.
Монстр умеет себя отрисовывать и выбирать направление движения, но для того чтобы знать куда ходить ему нужно иметь доступ к классу игра.
Сейчас я решил так, что в классе монстр завел поле типа игра и при создании присваиваю ссылку на игру.
Препод не доволен, говорит что классы "циклически (опосредованно) завясят друг от друга - это тоже очень грубая ошибка проектирования."
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.12.2011, 13:46     Получить доступ к родительскому классу #6
Dmitry99, Препод прав. Архитектура не айс.

Лучше будет что-то вроде такого.

Класс Монстр.
Класс Игровое поле.
Класс Игра.

Класс Игра содержит в себе массив монстров + игровое поле. В игровом поле есть метод, сообщающий есть-ли стена в конкретном месте. В монстре хранится ссылка на игровое поле.

НО.

Монстр вообщем-то не должен отрисовывать сам себя. Он монстр, а не художник.
silent_1991
28.12.2011, 13:58
  #7

Не по теме:

Цитата Сообщение от ForEveR Посмотреть сообщение
Монстр вообщем-то не должен отрисовывать сам себя. Он монстр, а не художник.
Хм, а полиморфизм классически объясняется на том примере, что каждая фигура умеет отрисовывать себя...

ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.12.2011, 14:00     Получить доступ к родительскому классу #8
silent_1991, Объясняется да. Но использовать... Ну даже не знаю. По логике - это несколько странно, отрисовывающий себя монстр, не так-ли? Куда логичнее выглядит класс, который отвечает за отрисовку, разве нет? С другой стороны - это по логике. По коду отрисовка объектом самого себя, в целом является приемлемой вещью.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
28.12.2011, 14:03     Получить доступ к родительскому классу #9
ForEveR, не думаю... Есть куча графических элементов, и что, нужен класс, который умеет отрисовывать их все? Т.е. при добавлении нового элемента нужно лезть в код класса и исправлять его? Пусть лучше все графические элементы реализуют интерфейс Drawable, а какой-нибудь Manager просто проходит по всем элементам и вызывает метод draw.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.12.2011, 14:04     Получить доступ к родительскому классу #10
silent_1991, Ну вот. С интерфейсом я соглашусь, ибо выходит, что класс реализует некую сущность, расширяя ее и чисто логически не является рисовальщиком сам по себе.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
28.12.2011, 14:38     Получить доступ к родительскому классу #11
Цитата Сообщение от silent_1991 Посмотреть сообщение
Есть куча графических элементов, и что, нужен класс, который умеет отрисовывать их все?
Есть куча геометрических фигур для начала Ну а потом уже всякие менеджеры, которые занимаются рисованием.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.12.2011, 15:29     Получить доступ к родительскому классу
Еще ссылки по теме:

C++ Получить доступ к private полю объекта
Не могу получить доступ к члену класса C++
Указание родительскому методу брать данные конечного Наследника C++

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
28.12.2011, 15:29     Получить доступ к родительскому классу #12
fasked, под графическими элементами я имел ввиду всё, что может быть отображено в программе. Будь то геометрические фигуры, монстры, скроллбары на формочке...
Yandex
Объявления
28.12.2011, 15:29     Получить доступ к родительскому классу
Ответ Создать тему
Опции темы

Текущее время: 16:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru