razrab83 21 26 июня Опубликовано 26 июня · Жалоба 3 минуты назад, Forger сказал: Кстати, а для чего такое вообще нужно? в смысле создавать такой наглухо забитый класс, который нельзя ни наследовать ни создавать )) присоединяюсь к вопросу. сущность класса - наследование, полиморфизм. Если его зафиналить и закупорить, все методы в статик - то можно всё сделать без класса. данные, функции... для нэймспейсинга использовать namespace. 7 минут назад, Forger сказал: можно вообще убрать слово private не очень хорошая идея. это "неявное". Когда ЯВНО указан private - это явно указан private . а когда его нет - он явно не указан или его забыли? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 22 26 июня Опубликовано 26 июня · Жалоба 10 minutes ago, razrab83 said: е очень хорошая идея. это "неявное". это как раз явное, т.к. жестко прописано в стандарте со времен царя гороха ) Впрочем, это больше для тех, кто желает абсолютного минимализма. В реальности конечно лучше конкретизировать каждый метод, например, как это сделано в с шарпе - очень удобно и наглядно. 12 minutes ago, razrab83 said: а когда его нет - он явно не указан или его забыли? нет, я как раз активно использую такую особенность (все поля/методы по умолчанию приватные), это немного но сокращает объем кода, как минимум описание класса не выглядит таким громозким. Но это вкусовщина, 100% Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 79 26 июня Опубликовано 26 июня · Жалоба Класс с приватным конструктором, чтобы нельзя было создать экземпляры этог о класса? Странно, зачем и почему так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
juvf 17 26 июня Опубликовано 26 июня · Жалоба В 26.06.2024 в 12:04, Forger сказал: это как раз явное, т.к. жестко прописано в стандарте со времен царя гороха ) это называется "неявное". Со времён царя гороха в стандарте с++ говорится, что по умолчанию будет приват. "по умолчанию" - читай "при неявном" ("по умолчанию" - значит когда "нет явного указания"). Более того, в с++14 Цитата Members of a class defined with the `class` key have private access by default; members of a class defined with the `struct` key have public access by default. Access specifiers can be provided explicitly. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 22 26 июня Опубликовано 26 июня · Жалоба 23 minutes ago, juvf said: это называется "неявное". хорошо, пусть "неявное", хотя это скорее вопрос терминологии )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 166 26 июня Опубликовано 26 июня · Жалоба Класс (а не нэймспейс) тут в первую очередь для создания классовой области видимости идентификаторов (чтобы можно было спокойно сначала визуально отделить public-функции, и потом в конце уже приватные потроха), а также для того, чтобы скрыть всякие вспомогательные штуки в приватном "хвосте" класса. Для явного использования они будут недоступны. Мне нужен лишь интерфейс (набор функций), который представлен хедером. Без какой-то конкретики - конкретика в *.cpp, который я могу, ежели что, скомпилить в библиотеку и отдать на сторону. P.S. Я в классе всегда сначала специфицирую публичную часть, потому что при чтении класса как правило надо видеть его интерфейс. Приватные потроха сбрасываю в конец класса под приватным селектором. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 22 26 июня Опубликовано 26 июня · Жалоба 13 minutes ago, Arlleex said: Приватные потроха сбрасываю в конец класса под приватным селектором. если речь про класс-синглтон, ну где по сути все статик, то всю приватную шелуху можно разместить прямо в начале cpp, дополнив static, чтобы никто не использовал это извне. Тогда интерфейс такого класса выглядит "чистым", а вся приватная "шелуха" спрятана там, где ее никому не нужно видеть, например: // Communication.hpp class Communication : public Module { public: Communication() { name = const_cast<char*>("Communication"); } static struct Signal { struct { Delegate<bool(SensorIndex)> isActive; } digitalInputs; struct { Delegate<void(ChannelIndex)> on; Delegate<void(ChannelIndex)> off; } digitalOutputs; struct { Delegate<Voltage()> getMainValveVoltage; } analogInputs; } signal; static Communication & getInstance(); }; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
razrab83 21 26 июня Опубликовано 26 июня · Жалоба 14 часов назад, Arlleex сказал: А это прям C++ или какое-то специальное расширение для компилятора? P.S. Неа... В кейле вот не работает(( теплоламповый Eclipse знает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 22 26 июня Опубликовано 26 июня · Жалоба 4 minutes ago, razrab83 said: теплоламповый Eclipse знает эклипс это просто оболочка, впрочем как и кейл, хотя с последним кейлом идет в комплекте свежий шестой компилятор по-умолчанию, он как раз и держит новые фичи Достаточно подключить современные компиляторы к этим оболочкам с нужными ключами и код будет компилироваться аналогично в обоих оболочках Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
razrab83 21 26 июня Опубликовано 26 июня · Жалоба 12 минут назад, Forger сказал: эклипс это просто оболочка, впрочем как и кейл Это ваш кеил - просто оболочка )) 16 минут назад, Forger сказал: и код будет компилироваться аналогично я не про это. в Eclipse, в визарде создания класса есть эти фичи. От компилятора визрад эклипса не зависит. Можно гуями все эти delete, приваты и final-ы настроить, В визарде QtCreator этого нет. в VSCode я тоже не замечал. в Кейле не знаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 22 26 июня Опубликовано 26 июня · Жалоба 22 minutes ago, razrab83 said: В визарде QtCreator этого нет. в VSCode я тоже не замечал. в Кейле не знаю. в кейле тоже нет, а разве это так необходимо? я например просто копирую целиком классы без всяких визардов, а что нужно меняю или дополняю Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 166 26 июня Опубликовано 26 июня · Жалоба 2 часа назад, Forger сказал: Тогда интерфейс такого класса выглядит "чистым", а вся приватная "шелуха" спрятана там, где ее никому не нужно видеть, например: А где она спрятана? В другом классе, который подключается из другого хедера? Так это не спрятана - это просто отведена от глаз - это можно и без синглтонов сделать, да и банально - как я показывал - разделять класс на несколько частей - публичную, в которой презентуется интерфейс класса для взаимодействия с ним, и приватную, в которой находятся все вспомогательные классу вещи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 22 26 июня Опубликовано 26 июня · Жалоба 9 minutes ago, Arlleex said: А где она спрятана? В другом классе, который подключается из другого хедера? Конечно нет ) Иначе будет беда )) повторюсь - в самом cpp файле реализации этого класса, это внутренние static классы или данные, что угодно, к чему нельзя обратиться через extern. Повторюсь, такое нужно только, если класс синглтон или так называемая "фабрика" классов (т.е. создание объектов через отдельный статик метод). Во втором случае подразумевается, что макс число объектов класса заранее известно и поэтому под их экземпляры можно заранее выделить место прямо в cpp файле с соотв. припиской static, а "выдавать" ссылки на них через отдельный открытый метод (статический конечно). Про фабрику классов лучше отдельно почитать, это такой паттерн программирования ) Почти не использую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 79 26 июня Опубликовано 26 июня · Жалоба 2 часа назад, Arlleex сказал: Приватные потроха сбрасываю в конец класса под приватным селектором. Между прочим, это - рекомендуемый современный стиль оформления. Раньше было наоборот, приватная секция в начале. Хотя, сам стандарт языка разрешает располагать секции в любом порядке, даже вперемешку, с чередованием. Однако, привычного из Си понятия "интерфейс" в ++ более не существует, и в классе накидано всё подряд. Именно поэтому современный стиль рекомендует публичную секцию, выполняющую роль интерфейса, располагать в начале списка. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 22 26 июня Опубликовано 26 июня · Жалоба 12 minutes ago, EdgeAligned said: Между прочим, это - рекомендуемый современный стиль оформления. Нормальный стиль, все наверняка к нему давно привыкли ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться