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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.88
Dmitry99
1 / 1 / 0
Регистрация: 11.11.2011
Сообщений: 9
#1

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

28.12.2011, 13:10. Просмотров 2014. Ответов 11
Метки нет (Все метки)

Есть класс;
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()
?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2011, 13:10     Получить доступ к родительскому классу
Посмотрите здесь:
Получить доступ к обьекту класса в друж. функц. этому классу при этом не передавая этот объект в качестве параметра C++
Доступ к классу как к контейнеру C++
Доступ к производному классу через методы в базовом C++
ООП как можно ограничить доступ к методу производного классу C++
Получить доступ в приват C++
Получить доступ к памяти C++
Указание родительскому методу брать данные конечного Наследника C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7967 / 4729 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 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
В астрале
Эксперт С++
7967 / 4729 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 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
В астрале
Эксперт С++
7967 / 4729 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
28.12.2011, 13:46     Получить доступ к родительскому классу #6
Dmitry99, Препод прав. Архитектура не айс.

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

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

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

НО.

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

Не по теме:

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

ForEveR
В астрале
Эксперт С++
7967 / 4729 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
28.12.2011, 14:00     Получить доступ к родительскому классу #8
silent_1991, Объясняется да. Но использовать... Ну даже не знаю. По логике - это несколько странно, отрисовывающий себя монстр, не так-ли? Куда логичнее выглядит класс, который отвечает за отрисовку, разве нет? С другой стороны - это по логике. По коду отрисовка объектом самого себя, в целом является приемлемой вещью.
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
28.12.2011, 14:03     Получить доступ к родительскому классу #9
ForEveR, не думаю... Есть куча графических элементов, и что, нужен класс, который умеет отрисовывать их все? Т.е. при добавлении нового элемента нужно лезть в код класса и исправлять его? Пусть лучше все графические элементы реализуют интерфейс Drawable, а какой-нибудь Manager просто проходит по всем элементам и вызывает метод draw.
ForEveR
В астрале
Эксперт С++
7967 / 4729 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
28.12.2011, 14:04     Получить доступ к родительскому классу #10
silent_1991, Ну вот. С интерфейсом я соглашусь, ибо выходит, что класс реализует некую сущность, расширяя ее и чисто логически не является рисовальщиком сам по себе.
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
28.12.2011, 14:38     Получить доступ к родительскому классу #11
Цитата Сообщение от silent_1991 Посмотреть сообщение
Есть куча графических элементов, и что, нужен класс, который умеет отрисовывать их все?
Есть куча геометрических фигур для начала Ну а потом уже всякие менеджеры, которые занимаются рисованием.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.12.2011, 15:29     Получить доступ к родительскому классу
Еще ссылки по теме:
Получить доступ к полям структуры C++
Как получить доступ к приватному полю C++
C++ Как получить доступ к элементам вектора
C++ Получить доступ к private полю объекта
C++ Не могу получить доступ к члену класса

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

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

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