Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
15 / 15 / 0
Регистрация: 16.08.2018
Сообщений: 128

Университет. Стиль написания имени вложенного класса. Исключение или нет?

30.12.2020, 14:51. Показов 1887. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В университете часто замечаешь нетривиальные ситуации, которые заставляют тебя немного задаться вопросом, возможно не одним.
Была задана лабораторная работа, в которой требовалось реализовать в классе двусвязного списка вложенные классы iterator и node. Пример реализации был предоставлен нам и скопирован-вставлен ниже.
Обычно требуется, чтобы при реализации имя класса писалось со строчной буквы, а не с прописной, как в примере, что меня удивило.
Может быть это некоторое исключение или определённый codeStyle?
А может принято, чтобы имена класса переопределяли в самом классе через директиву препроцессора define с маленькой буквы? Ведь нам требуется самостоятельно определить псевдонимы типов.
Пример:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
using value_type = /* type of class */;
    using ref = value_type&;
    using cref = const value_type&;
    using ptr = value_type*;
    using cptr = const value_type*;
    using rval = value_type&&;
    using size_type = unsigned long;



Листинг 1. Интерфейс последовательного контейнера (на основе списка)
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class List
{ public:
// -- типы – определить самостоятельно --
private:
// -- структура элемента списка – определить самостоятельно --
public:
// -- Вложенный класс-итератор –
/* Конструкторы/деструктор/присваивания */
List();
virtual ~List();
List(const std::initializer_list<value_type> &t);
List(const List& other);
List(List&& other) noexcept; // -- конструктор переноса --
List& operator=(List&& other) noexcept; // -- операция перемещания --
List& operator=(const List& other);
// Итераторы ----------------
iterator /* !!! */begin() noexcept;
iterator /* !!! */ end() noexcept;
// Доступ к элементам -------
reference front();
reference back();
// Размеры ------------------
bool empty () const noexcept
size_type size() const noexcept
// Модификаторы контейнера --
void push_front (const_reference); // добавить в начало
void push_front (value_type &&); // добавить в начало - временный объект --
void pop_front (); // удалить первый
void push_back (const_reference); // добавить в конец
void push_back (value_type &&); // добавить в начало - временный объект --
void pop_back (); // удалить последний
iterator /* !!! */ insert (iterator /* !!! */, const_reference); // вставить в позицию итератора
iterator /* !!! */ insert (iterator /* !!! */, value_type&&); // вставить временный объект --
iterator /* !!! */ erase (iterator /* !!! */); // удалить указанный (в позиции)
void clear (); // удалить все
void swap (List &t) noexcept // обменять с заданным списком
};


Листинг 2. Интерфейс двунаправленного итератора последовательного контейнера (на основе списка)
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
struct iterator
{ // Конструкторы --
explicit iterator(node /* !!! */ * t) noexcept;
iterator /* !!! */() noexcept;
// Сравнение итераторов
bool operator==(const iterator /* !!! */&it) const noexcept;
bool operator!=(const iterator /* !!! */&it) const noexcept;
// Перемещение итератора
iterator /* !!! */& operator++(); // вперед
iterator /* !!! */& operator--(); // назад
reference operator*() // разыменование
}; // -- конец итератора --
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.12.2020, 14:51
Ответы с готовыми решениями:

Вызов метода с другого класса без написания впереди его имени
Есть базовый класс, и клас в котором я беру функции с дллки. почему оно не видит вызов GetCursorPos(ref pt); , вызвать можно разве что...

Стиль для первого вложенного дива
Здравствуйте! &lt;div class='full'&gt; &lt;div&gt; &lt;div&gt;текст&lt;/div&gt; &lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;/div&gt; Так вот надо как...

Странный SIGSEGV, или что зависит от порядка написания интерфейса класса
Есть некий класс,и в нем в секции private записано следующее: private: Value *val; Types var_type; ...

4
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
30.12.2020, 15:29
Цитата Сообщение от German2002g Посмотреть сообщение
А может принято, чтобы имена класса переопределяли в самом классе через директиву препроцессора define с маленькой буквы? Ведь нам требуется самостоятельно определить псевдонимы типов.
Свой классы можешь называть как хочешь.
А вот определённые методы и типы - begin, end, value_type ..., нужно называть так же, как они называются в стандартной библиотеке. Если хочешь, чтоб она и компилятор работали с твоим классом.

Добавлено через 26 секунд
Переопределять через препроцессор ничего не надо
0
15 / 15 / 0
Регистрация: 16.08.2018
Сообщений: 128
30.12.2020, 18:24  [ТС]
Тут немного вопрос неоднозначный. Почему они в своём коде написали именно так (обозначили имя со строчной, а не прописной буквы), ведь так не принято, верно?
0
 Аватар для vvm28
771 / 539 / 67
Регистрация: 22.12.2013
Сообщений: 2,498
Записей в блоге: 26
30.12.2020, 19:38
Лучший ответ Сообщение было отмечено German2002g как решение

Решение

German2002g, Поищите: "стили написания кода с++"

Ну вот например:
90 рекомендаций по стилю написания программ на C++
https://habr.com/ru/post/172091/

Стандарты программирования на С++. 101 правило и рекомендация (fb2)
https://coollib.com/b/176648/read

Как писать красивый и читаемый код?
1
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
30.12.2020, 19:56
Лучший ответ Сообщение было отмечено German2002g как решение

Решение

Цитата Сообщение от German2002g Посмотреть сообщение
класса переопределяли в самом классе через директиву препроцессора define с маленькой буквы
define для этого не подходит, он ничего не переопределяет. define - это текстовая find + replace, про код на С++ он ничего не знает, работает в рамках своего синтаксиса и просто заменяет один текст на другой. Не используйте define для "переопределения" типов.

Цитата Сообщение от German2002g Посмотреть сообщение
Пример:
Это сделано для совместимости со стандартной библиотекой. Никакого глобального жесткого запрета на такую стилистику не существует.

Добавлено через 2 минуты
Цитата Сообщение от German2002g Посмотреть сообщение
ведь так не принято, верно?
Насчет "не принято" - не верно. Не принято может быть в какой-то конкретной организации, согласно их правилам стиля для кода. А глобального "не принято" не существует.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.12.2020, 19:56
Помогаю со студенческими работами здесь

Как при создании экземпляра класса инициализировать переменные вложенного класса
Здравствуйте. Подскажите пожалуйста как при создании екземпляра класа инициализировать переменные вложеного класа. Добавлено через 22...

Можно и изменить стиль отображения класса ListView или придется писать свой контрол
Требуется создать контрол ListViewer. Контролы будут отображаться списком. Требуется: 1)&quot;Подсветска&quot; при наведении. ...

Как вызвать метод вложенного класса в методе родительского класса
Имеется родительский класс для прорисовки графики Jogj package objects; import com.jogamp.opengl.GL2; import...

Как вынести описание методов вложенного класса за пределы класса?
Подскажите, пожалуйста, как мне вынести описание методов вложенного класса за пределы класса?

Стиль написания
В чем здесь ошибка? SELECT Year, -- год заказа ,,,,,,,,,,, -- порядковые номера месяцев FROM PivotData ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru