Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/42: Рейтинг темы: голосов - 42, средняя оценка - 4.60
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510

Статический класс

25.04.2024, 04:02. Показов 10143. Ответов 165
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет
хочу создать полностью статический класс и создаю
но возникают ошибки неопределенные reference и пр.

хотелось бы сделать так
C#
1
2
3
4
5
6
7
static class SomeClass{
 
 
public int var1{}, var2{}, var3{};
......
 
}
но в с++ ругается на static перед словом класс
пишу в итоге так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class SomeClass{
 
SomeClass(){};
public:
 
static float var1{}, var2{}, varN{}; 
static float somethingMethod(){
//тут использую переменные var1, var2....
};
 
//static float var1{}, var2{}, varN{}; // без разницы   где объявляю переменные выше или ниже метода,  ругается не необъявленные переменные
 
 
 
}
 
 
//
 
вызываю так 
SomeClass::somethingMethod();

при компиляции получаю ошибки
необъявленные ссылки на var1, var2 ....

undefined reference to `SomeClass::var1


вопрос
как объявить статический метод класса, а в идеале и вообще весь класс, чтобы не создавать в коде его экземпляр?

Добавлено через 4 минуты
основная задача вынести этот статический класс в один файл то бишь в модуль не хедер + cpp а сразу все
в одном как в шарпах - очень удобно это они придумали в шарпах
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.04.2024, 04:02
Ответы с готовыми решениями:

Дан класс, преобразуйте его в статический класс со статическими методами и продемонстрируйте работу с ним
Дан класс, преобразуйте его в статический класс со статическими методами и продемонстрируйте работу с ним.

Статический класс
Здравствуйте, а я правильно понимаю что статический класс - это класс у которого все методы статические? Добавлено через 57 секунд ...

Статический член указатель на класс
Доброго времени суток. Что требовалось: создать статический указатель на класс CPerson, чтобы сохранить в него нужный объект. Как пытался...

165
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
13.05.2024, 17:45  [ТС]
Студворк — интернет-сервис помощи студентам
test
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
13.05.2024, 17:46
Цитата Сообщение от pup_kin Посмотреть сообщение
а что в данном случае будет объявление ?
Если это не статическая переменная класса (например глобальная или локальная в функции), то это будет объявление + определение.
Если статическая класса, то для того, чтобы эта запись считалась определением, нужно дописать inline, иначе это только объявление (ну и дальше по тексту начиная с третьей страницы темы).
1
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
13.05.2024, 17:50  [ТС]
тем не менее
из всей темы - непонятен вывод, кроме того
что
так принято. и не более того.
так написаны компиляторы.
и нет других оснований.
я вижу это так.

не считая inline

Добавлено через 2 минуты
т.е. есть некое поведение, исторически сложившееся,
мне вообще без разницы объявление оно или определение.
Факт то, что с помощью одной статики можно определить другую статику и компилятор это хавает, не заставляя сидеть в куче хедеров инклюдить их по очереди.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
13.05.2024, 17:57
pup_kin, Вывод из всей темы в том, что нужно читать книги, и задавать конкретные вопросы по прочитанному, а не пытаться выучить язык на форуме

У вас эта тема уже 30 раз правила форума нарушила. Потому что у вас в ней не один вопрос, а целый пласт знаний, сопоставимый с книгой поднимается. Так нельзя. Во-первых вы ничего не усвоите, потому что как бы мы не старались, особенно с таким разрывом по времени как вы тут появляетесь, системно изложить информацию не получится. Во-вторых, для изучения необходимо очистить разум и не делать поспешных выводов, а вы сейчас уже как будто бы решили, что все уже поняли, хотя до этого еще как до Луны.
1
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
13.05.2024, 19:15
Цитата Сообщение от pup_kin Посмотреть сообщение
так принято. и не более того.
так написаны компиляторы.
Никакого "исторически сложилось" здесь нет.

Это продуманный и умышленно спроектированный именно так дизайн языка, продиктованный типичным разделением процессов компиляции и линковки.
Как вы (надеюсь) знаете, в С++ (как и в большинстве видимо компилируемых языков) "перевод" исходного текста в исполняемый файл выполняется в 2 этапа:
- компиляция (из набора .h и .cpp получаем набор .obj)
- линковка (из набора .obj и .lib получаем .exe)

Такое разделение позволяет ускорять процесс получения исполняемого файла (.exe) в случае кучи .cpp в проекте.
Если в проекте 100 .cpp-файлов и изменился только один, то достаточно только его один перекомпилировать, а далее из ста уже имеющихся .obj собрать .exe. Что, конечно, быстрее, чем перекомпилировать все 100 файлов .cpp при повторных компиляциях.

И именно для того, чтобы линковщик мог разрешить все ссылки на переменные и функции ("разрешить" здесь не в смысле "разрешить/запретить", а в смысле определить их адреса по именам) и придумана вся эта схема с - объявлением и определением статических переменных и статических членов класса.

Так что никаких "исторически сложившихся традиций" тут нет. Сугубо техническая архитектура и техническая необходимость. Которая никуда не исчезла и не исчезнет.
Ну разве что её подсластят и сделают немного более удобной при помощи inline в современных версиях.

PS
Хотя как синтаксически сделано объявление статических переменных в новомодных компилируемых языках я что-то не вникал...
1
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
14.05.2024, 10:17
Цитата Сообщение от pup_kin Посмотреть сообщение
и интерпретируется в инструкции характерные для текущей архитектуры
Разные уровни абстракции.

Добавлено через 1 минуту
Наказывайте уже Волгу за чистку всего чего не попадя....
Это жесть просто.

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от KSergey9 Посмотреть сообщение
Как вы (надеюсь) знаете, в С++
Он ОдинЕсник, что он может знать ? )))

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.05.2024, 10:17
Помогаю со студенческими работами здесь

Не могу вызвать простой статический класс
Вот такой код получился (VS2017): #pragma once #include <iostream> #include <string> static class Func { ...

Статический полиморфизм. Базовый класс «прямоугольник»
Здравствуйте, дорогие участники форума! Помогите, пожалуйста! Необходимо реализовать статический полиморфизм. Нужно вызвать с помощью...

Нужно создать статический массив строк как статический массив указателей на строки. Условние ниже -->
Слова английского текста рассортировать по возрастанию количества заданной буквы в слове. Слова с одинаковым количеством такой буквы...

создать статический массив строк как статический массив указателей на строки, задание ниже -->
Слова английского текста, начинающиеся с гласных букв, рассортировать в алфавитном порядке по первой согласной букве слова. Остальные слова...

Объясните человеческим языком мне чайнику что такое singleton, статический класс. Зачем они нужны. Что рекомендуете прочитать мне для начала
Объясните человеческим языком мне чайнику что такое singleton, статический класс. Зачем они нужны. Что рекомендуете прочитать мне для...


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

Или воспользуйтесь поиском по форуму:
166
Ответ Создать тему
Новые блоги и статьи
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 https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru