|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
||||||
Создание класса в другом классе27.10.2016, 16:40. Показов 12052. Ответов 23
Метки нет (Все метки)
Приветствую всех. Уважаемые гуру, скажите можно ли создавать класс в теле друго класса? Причем создание "внутреннего" класса идет на основании класса родителя. Код примерно такой:
0
|
||||||
| 27.10.2016, 16:40 | |
|
Ответы с готовыми решениями:
23
Объект класса в другом классе Вызвать метод класса в другом классе |
|
Вездепух
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,218
|
|
| 27.10.2016, 17:21 | |
|
1
|
|
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
| 27.10.2016, 17:23 | |
|
d7d1cd, название у данного подхода -
Nested class c++
1
|
|
|
Комп_Оратор)
|
||||||||
| 27.10.2016, 23:53 | ||||||||
|
Я жуть как удивился. Ведь наследник ЭТО родитель ( IS ). То есть, следуя общему правилу, невозможности рекурсивных определений для типов (можно указатель лишь на себя определить) не должно скомпилироваться. Попробовал и точно:
![]() Пробовал гуглить сначала, но только в в Wiki нашёл в начледовании для шарпа. Там разрешено включать класс наследник. Но это не C++. ![]() https://ru.wikipedia.org/wiki/... 0%B8%D0%B5)
0
|
||||||||
|
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
|
|
| 27.10.2016, 23:55 | |
|
IGPIGP, там другой класс в качестве базового
1
|
|
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||||||
| 28.10.2016, 02:35 | |||||||
4
|
|||||||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
||||||
| 28.10.2016, 08:11 [ТС] | ||||||
|
Еще вопрос. Чтобы написать реализацию функции внутреннего класса надо указать сначала внешний класс, потом внутренний, потом саму функцию?
0
|
||||||
|
Комп_Оратор)
|
||||||
| 28.10.2016, 10:24 | ||||||
|
Renji, я понимаю, что вопрос чисто теоретический, так как наследование обычно сильно именно публичным наследование с виртуальным полиморфизмом, а вложенность отражает намерение скрыть тип. И такое противоречие не может не порождать проблем. Или я опять не знаю как выйти из ситуации или наследование во вложенном классе от внешнего класса проблематично в части использования наследника в себе же. Поскольку тема не совсем соответствует старту, - под спойлер:
Кликните здесь для просмотра всего текста
d7d1cd, тут немножко есть про обращение к методам вложенного класса. Совет: создайте сначала объект вложенного класса для обращения к его нестатическим методам. Для обращения к статическим - через полную квалификацию имён от внешнего класса. И да, всё должно быть public.
0
|
||||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 28.10.2016, 10:44 | ||
|
0
|
||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
||
| 28.10.2016, 10:51 [ТС] | ||
|
0
|
||
|
Комп_Оратор)
|
|||
| 28.10.2016, 11:04 | |||
0
|
|||
|
|
|||||||
| 28.10.2016, 12:35 | |||||||
|
Хотя подобным образом удобно использовать структуры вложенные в класс для группировки членов класса.
0
|
|||||||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|
| 12.07.2017, 14:21 [ТС] | |
|
Возник вопрос по текущей теме вложенных классов, а проверить не могу - компилятора нет под рукой. Подскажите, доступны ли переменные внешнего класса из функций его вложенного класса?
0
|
|
|
Комп_Оратор)
|
||
| 12.07.2017, 16:34 | ||
![]() К переменным в смысле - объектам и сам класс не может (своими статическими методами). Их надо передавать (объекты).
0
|
||
|
Вездепух
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,218
|
||
| 12.07.2017, 18:52 | ||
|
Права доступа к полям внешнего класса у вложенного класса есть.
0
|
||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
||||||||
| 12.07.2017, 19:46 [ТС] | ||||||||
HeirFoo к переменной MajorData?
0
|
||||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||||||
| 12.07.2017, 20:09 | |||||||
2
|
|||||||
|
Комп_Оратор)
|
|||
| 12.07.2017, 20:28 | |||
|
1
|
|||
|
Вездепух
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,218
|
|||
| 12.07.2017, 20:57 | |||
|
Из того, что у вас есть права на вождение автомобиля, совсем не следует, что у вас уже есть автомобиль. Автомобиль вам все таки придется добывать самому, отдельно. У вас может быть целый ящик разных прав на вождение автомобиля, но если у вас нет самого автомобиля, то водить вам будет нечего. У вложенного класса есть права на доступ к полям внешнего класса. Но сначала вложенному классу надо получить объект этого внешнего класса, к полям которого он будет доступаться. У вас в коде никакого объекта внешнего класса нет вообще. Поэтому и доступаться вам не к чему. Об этом вам и говорит компилятор. MajorData существуют только внутри объектов типа TMajor. Где ваш объект типа TMajor, к полю MajorData которого вы хотите доступиться из HeirFoo()? Если нет объекта, то и доступаться не к чему.
1
|
|||
| 12.07.2017, 20:57 | |
|
Помогаю со студенческими работами здесь
20
Массив элементов класса в другом классе Использование объектов класса в другом классе Вызов динамического аргумента класса в другом классе
Использование данных одного класса в другом классе Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Камера 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. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|