|
0 / 0 / 0
Регистрация: 08.06.2009
Сообщений: 4
|
||||||
Как правильно инициализировать статические члены класса?07.07.2009, 04:10. Показов 5590. Ответов 10
Метки нет (Все метки)
Я новичок и заранее прошу прощение за тупые вопросы. Имеются два класса: Solution и Pool. Pool состоит из нескольких обьектов класса Solution. Эти обьекты отличаются только переменными *x и y. Все остальные члены одинаковы: **a, n, yFunc. Чтобы предотвратить копирование **a и n во все обьекты Solution, я обьявил их как static. Вопрос такой: правильно ли я инициализирую **a и n внутри конструктора Pool? Может имеется другой, более элегантный способ глобального использования **a и n во всех обьектах Solution. Как мне поступить с функцией yFunc, которая тоже общая для всех обьектов Solution? Заранее спасибо!
0
|
||||||
| 07.07.2009, 04:10 | |
|
Ответы с готовыми решениями:
10
Как инициализировать статические члены класса Как инициализировать члены класса, являющегося параметром шаблона
|
|
Любитель давать советы
342 / 135 / 14
Регистрация: 12.01.2009
Сообщений: 511
|
|||
| 07.07.2009, 05:19 | |||
|
Тут главный вопрос другой: должна ли эта функция работать с полями x и y конкретного класса? Если не должна, то ее можно сделать статической. Если должна, то ее делать статической нельзя. И хотя нестатическая функция вызывается через конкретный объект, это не значит, что она своя у каждого объекта. Фактически, этот объект просто передается ей как скрытый параметр.
1
|
|||
|
0 / 0 / 0
Регистрация: 08.06.2009
Сообщений: 4
|
|
| 07.07.2009, 07:25 [ТС] | |
|
Большое спасибо. Забыл я про память для *x. Функция yFunc работает с статическими и нестатическими параметрами. Как я правильно Вас понял, её нельзя делать статической.
0
|
|
|
|
||||||
| 07.07.2009, 09:10 | ||||||
|
> Pool состоит из нескольких обьектов класса Solution
При этом я вижу только один вызов StaticSet В конструкторе А вообще код на самом деле написан неверно. При появлении нового объекта класса Pool будет вызываться конструктор Pool, который вызовет StaticSet, а там массив a выделится по-новой. Правильно писать что-то типа того:
0
|
||||||
|
0 / 0 / 0
Регистрация: 08.06.2009
Сообщений: 4
|
|||||||||||
| 07.07.2009, 20:00 [ТС] | |||||||||||
|
Спасибо Evg. Я тут порылся в книгах и на инете и нашёл ещё один вариант обьявления общих членов класса без их копирования для всех обьектов этого класса.
Итак, вариант №1 - статические члены
0
|
|||||||||||
|
Maniac
|
|||||||
| 07.07.2009, 20:11 | |||||||
0
|
|||||||
|
|
|||
| 07.07.2009, 20:21 | |||
|
0
|
|||
|
0 / 0 / 0
Регистрация: 08.06.2009
Сообщений: 4
|
||||||
| 07.07.2009, 21:18 [ТС] | ||||||
|
Значит первый вариант не годится? Статические данные иницилизируются внутри класса, что запрещено если они не const. Как насчёт второго варианта с классом-ссылкой. Будет ли копироваться класс Statics для каждого обьекта класса Solution или нет? Мне нужна только одна версия Statics для 100 обьектов класса Solution.
0
|
||||||
|
|
|||
| 07.07.2009, 21:53 | |||
|
Первый вариант нужно будет дорабатывать на тот случай, если у класса Statics будет несколько конструкторов. В этом случае для концептуальной правильности код по выделению памяти для a надо вынести в отдельный private метод и из каждого конструктора этот метод дёргать
0
|
|||
| 07.07.2009, 21:53 | |
|
Помогаю со студенческими работами здесь
11
Статические члены класса Статические члены класса Статические массивы, члены класса Где инициализировать члены класса CTreeCtrl? Конструктор класса, содержащего только статические члены Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|