Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238

Доступ к структуре в теле класса

18.11.2019, 17:33. Показов 2624. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Почему я могу получить доступ к структуре объявленной в теле класса? Похоже на static
C++
1
2
3
4
5
6
7
8
class cl{
public:
struct st{};
};
int main(){
cl::st;
return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.11.2019, 17:33
Ответы с готовыми решениями:

Доступ к private структуре класса
class MyClass { private: struct TMass{ char str2; int x; TMass *next; } *begin; public: ...

Доступ к структуре из дочернего класса
В такой форме не получается, в чём проблема? Добавлено через 31 минуту файл strucrures.h struct ABC { int x; };

Доступ к переменной, объявленной в теле цикла
Здравствуйте, есть следующий код using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

18
фрилансер
 Аватар для Алексей1153
6472 / 5687 / 1131
Регистрация: 11.10.2019
Сообщений: 15,167
18.11.2019, 17:39
компилятор подсказывает:error: declaration does not declare anything
Нужен идентификатор объявляемой переменной
C++
1
2
3
4
5
6
7
8
9
10
11
class cl
{
    public:
    struct st{};
};
 
int main()
{
    cl::st s;
    return 0;
}
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
18.11.2019, 17:41
Алексей1153, забыл написать,но суть проблемы не в этом ,почему я могу иметь доступ через тип ,а не через переменную?
0
фрилансер
 Аватар для Алексей1153
6472 / 5687 / 1131
Регистрация: 11.10.2019
Сообщений: 15,167
18.11.2019, 17:44
ReYalp, класс является областью видимости для типа st, поэтому область видимости и указывается
0
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
18.11.2019, 17:48
Цитата Сообщение от ReYalp Посмотреть сообщение
забыл написать,но суть проблемы не в этом ,почему я могу иметь доступ через тип ,а не через переменную?
а почему доступ к типу должен осуществляться через переменную, это же просто имена
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
18.11.2019, 18:00
Raali, мне почему-то казалось что если структура находится внутри тела класса (либо наоборот) то доступ к ней имеют только члены этого класса
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
18.11.2019, 18:12
Цитата Сообщение от ReYalp Посмотреть сообщение
мне почему-то казалось что если структура находится внутри тела класса (либо наоборот) то доступ к ней имеют только члены этого класса
Она же у вас в public.
0
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
18.11.2019, 18:27  [ТС]
DrOffset, а можно тут как-то обратиться к структуре через переменную?
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
18.11.2019, 18:30
DrOffset, но если я создам к примеру int i; там же то уже доступ через cl не буду иметь.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
18.11.2019, 19:02
Vanconts, если нужно поле в классе, которое имело бы тип этой структуры, то это делать так
C++
1
2
3
4
5
6
class cl{
public:
struct st{} st_value_0;  // можно объявлять поле класса так
 
st st_value_1;  // а можно так
};
1
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
18.11.2019, 19:36
Цитата Сообщение от ReYalp Посмотреть сообщение
но если я создам к примеру int i; там же то уже доступ через cl не буду иметь.
Правильно, она же не статическая.

Цитата Сообщение от Vanconts Посмотреть сообщение
а можно тут как-то обратиться к структуре через переменную?
К структуре или к объекту структуры?
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
18.11.2019, 19:57
Цитата Сообщение от DrOffset Посмотреть сообщение
Правильно, она же не статическая.
так почему я к не статической структуре могу иметь доступ извне класса ,а к полю нет?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
18.11.2019, 20:01
Цитата Сообщение от ReYalp Посмотреть сообщение
так почему я к не статической структуре могу иметь доступ извне класса
Структура не бывает статическая или не статическая
Статическая переменная объявляется в namespace класса и структура объявляется в namespace класса. Поэтому вы можете получить доступ через операцию разрешения области видимости :: и к тому и к другому.

Добавлено через 2 минуты
Образно говоря, объявление структуры всегда "статическое". Т.е. оно создано и доступно на этапе компиляции.

Нестатические поля начинают жить только после того, как будет создан объект класса. Объект создается на этапе исполнения программы. В этом отличие. Т.к. С++ статически типизирован, то все объявления типов в нем "статические". Возможно так будет понятнее.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
19.11.2019, 11:36
DrOffset, тоесть эта структура начинает "жить" еще до создания объекта класса?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
19.11.2019, 11:46
ReYalp, ваша структура st ничем кроме области видимости не отличается от вашего класса cl.

Добавлено через 2 минуты
ReYalp, это все части одного обьявления. Естественно объявление типа будет раньше, чем объекты этого типа.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
19.11.2019, 11:49
DrOffset, а есть пример где такой подход может использоваться?Где нужно использовать структуру в public отделе класса
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
19.11.2019, 11:50
ReYalp, итератор в векторе, например.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
19.11.2019, 11:55
Цитата Сообщение от DrOffset Посмотреть сообщение
итератор в векторе, например.
можно конкретнее? Зачем нужна такая структура если ее можно создать вне класса ,она всеравно не имеет доступа к полям класса
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
19.11.2019, 12:05
ReYalp, выразительная возможность показать общность.
Также в шаблонах пригождается, когда внутренний тип как-то использует параметры шаблона внешнего.
Ну и насчёт членов класса вы не правы. Внутренняя структура может иметь доступ к членам класса. Через имя типа, если это статические члены, или через ссылку или указатель, переданные в методы внутреннего типа.

Добавлено через 2 минуты
Http://rextester.com/PLYAY49844
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.11.2019, 12:05
Помогаю со студенческими работами здесь

Friend функции, определенные в теле класса
Всем привет! Непонятна логика, которой руководствуются компиляторы. Рассмотрим код: #include <iostream> struct...

Инициализация в конструкторе или теле класса ?
Вопрос я думаю достаточно нубский, но google не помог. например есть класс public class Point { public int X {get; set;} ...

Наследование. Конструктор базового класса в теле производного
Здравствуйте! Помогите, пожалуйста, разобраться. Есть пример: class String { protected: static const short SIZE = 10; ...

Разместить экземпляры одного класса в теле другого
Всем здравствуйте. Есть внешний класс, содержащий массив экземпляров внутренних классов: class Tinner { private: public: ...

Доступ к перечислению в структуре
Приветствую всех. Создаю структуру примерно такого содержания: struct MyStruct { enum {One = 1, Two, Three, Four } Number; }; ...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru