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

Глобальный объект класса

01.11.2016, 23:52. Показов 14531. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер всем!)
Вообщем суть такая: пишу статическую библиотеку, которая состоит из кучи файлов. Есть класс, конструктор которого принимает входные параметры.
Суть в том, что нужно, чтобы библиотека имела собственный объект класса, доступный во всех других файлах и конструктор этого класса был доступен за пределами библиотеки.
Вопрос: как объявить объект класса так, чтобы его конструктор выполнялся единожды, т.е. инициализировать объект и использовать его в других модулях библиотеки.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.11.2016, 23:52
Ответы с готовыми решениями:

Глобальный объект класса
Ребят, написал класс для реализации очереди на основе массива в отдельном юните, теперь мне нужно в другом получить объект класса, который...

Глобальный объект
Как сделать, чтобы я создал объект, и его видел весь файл? Суть в том, что в конструктор я хочу передать аргумент. Или нужно сделать...

Глобальный объект
Есть у меня приложение с формой Win Forms(CLR) Ну у меня весь код соответственно в .h файле. Как там объявить вектор, что-бы его можно было...

15
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
01.11.2016, 23:55
http://stackoverflow.com/quest... gn-pattern
0
0 / 0 / 0
Регистрация: 06.03.2013
Сообщений: 14
02.11.2016, 00:00  [ТС]
Мне нужен объект внутренний(внутри библиотеки), оставляя при этом возможность создать объект класса из программы, которая подключает библиотеку.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
02.11.2016, 00:46
Цитата Сообщение от Beatclap Посмотреть сообщение
нужно, чтобы библиотека имела собственный объект класса, доступный во всех других файлах и конструктор этого класса был доступен за пределами библиотеки.
Это чем не устраивает?
C++
1
2
3
4
5
6
7
class C
{
    int x, y, z;
public:
    C(int a, int b, int c) : x(a), y(b), z(c)
    {}
};
В каком-нибудь .cpp:
C++
1
C globalobj(1, 2, 3);
Там, где нужен:
C++
1
extern C globalobj;
1
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
02.11.2016, 00:59
Beatclap, а можете воду в задании убрать до экзамена, и рассказать больше фактов и примеров? Пока что фраза выполнялся единожды звучит как синглтон, но вы уверены, что это не он. Страно.
0
0 / 0 / 0
Регистрация: 06.03.2013
Сообщений: 14
02.11.2016, 01:05  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Это чем не устраивает?
C++
1
2
3
4
5
6
7
class C
{
    int x, y, z;
public:
    C(int a, int b, int c) : x(a), y(b), z(c)
    {}
};
В каком-нибудь .cpp:
C++
1
C globalobj(1, 2, 3);
Там, где нужен:
C++
1
extern C globalobj;
Находил такой вариант в гугле. Не собирался проект. Ошибка в IDE не читабельная была. Короче, сейчас попробую разобраться с этим extern. Спасибо.

Добавлено через 5 минут
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Beatclap, а можете воду в задании убрать до экзамена, и рассказать больше фактов и примеров? Пока что фраза выполнялся единожды звучит как синглтон, но вы уверены, что это не он. Страно.
В каком задании? Какой экзамен???
Мне нужен объект класса (один конкретный), который я смогу использовать внутри других классов. Классы у меня раскиданы по файлам. Подключив хидер, в котором объявлен этот объект, конструктор срабатывает по новой.
Но, также класс должен использоваться извне.

Вообщем, например, есть класс, конструктор которого создает файл и методы класса работают с ним. Мне нужно иметь локальный(библиотечный) файл, и возможность создавать файлы и работать с ними через тот же класс из другого проекта.

Если опять не понятно, попробую еще как-нибудь объяснить)
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
02.11.2016, 01:08
Цитата Сообщение от Beatclap Посмотреть сообщение
Подключив хидер, в котором объявлен этот объект, конструктор срабатывает по новой.
Не нужно объекты в хидерах создавать, только в .cpp.
0
0 / 0 / 0
Регистрация: 06.03.2013
Сообщений: 14
02.11.2016, 01:10  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Не нужно объекты в хидерах создавать, только в .cpp.
Ну вот я и интересуюсь, как объект создать так, чтобы можно было его использовать в других .cpp?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
02.11.2016, 01:13
Beatclap, у тебя просто противоречие в первом посте: конструктор должен срабатывать единожды, и, в тоже время, быть доступным за пределами библиотеки. Тут что-то одно должно быть. Отчего и удивление rikimaru2013.

Добавлено через 51 секунду
Цитата Сообщение от Beatclap Посмотреть сообщение
Ну вот я и интересуюсь, как объект создать так, чтобы можно было его использовать в других .cpp?
4 пост.
0
0 / 0 / 0
Регистрация: 06.03.2013
Сообщений: 14
02.11.2016, 01:16  [ТС]
Я понимаю, что не корректно объясняю. Просто суть в том, что я не знаю как грамотно юзать объект в нескольких .cpp проекта. Создавал объект в хидере из-за чего при подключении где-либо хидера статический объект создавался по новой (конструктор срабатывал несколько раз).
Про синглтон я загуглил, но мне надо, чтобы конструктор класса оставался публичным.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
02.11.2016, 01:16
У глобального объекта - внешнее связывание, т.е. будет виден во всех файлах программы. Единственное что нужно сделать: создать его в .cpp и применить extern там, где нужно будет его использовать. Ну, и естественно, там где он будет создаваться, и там, где будет использоваться, должен быть виден класс.
0
0 / 0 / 0
Регистрация: 06.03.2013
Сообщений: 14
02.11.2016, 01:23  [ТС]
Спасибо еще раз. Сейчас попробую разобраться с ним.

Добавлено через 4 минуты
Цитата Сообщение от nd2 Посмотреть сообщение
У глобального объекта - внешнее связывание, т.е. будет виден во всех файлах программы. Единственное что нужно сделать: создать его в .cpp и применить extern там, где нужно будет его использовать. Ну, и естественно, там где он будет создаваться, и там, где будет использоваться, должен быть виден класс.
Сейчас все нормально собралось. Странно, что до создания темы при попытках заюзать extern ошибки посыпались (IDE иногда сыпит не понятными ошибками с тупым набором символов). Видно, что-то где-то забыл удалить. Спасибо еще раз всем за помощь.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
02.11.2016, 01:32
Цитата Сообщение от Beatclap Посмотреть сообщение
IDE иногда сыпит не понятными ошибками с тупым набором символов
Что за IDE?
Цитата Сообщение от Beatclap Посмотреть сообщение
Странно, что до создания темы при попытках заюзать extern ошибки посыпались
Может ты пробовал extern с определением? Типа:
C++
1
extern C globalobj(1, 2, 3);
Тут extern будет просто игнорироваться, т.е., будет не просто объявление, а ещё и определение, с возможными соответствующими последствиями.
0
0 / 0 / 0
Регистрация: 06.03.2013
Сообщений: 14
02.11.2016, 01:40  [ТС]
VS 2015.
Я где-то читал, про такую проблему, но тогда было не до исправления этой проблемы. Вроде как с локализацией беда.

Extern не работал, наверное, из-за того, что там, где писался extern, не виден был класс. Сейчас разобрался. Все в порядке. Еще я создал .cpp, где создается объект для библиотеки, и хидер, в котором написан extern и включается хидер класса. Ну короче, внутри своей библиотеки я буду юзать этот хидер, а в хидере библы у меня будет выход на класс. Ну вообщем, чтобы мой объект не существовал за пределами библы, а внутри библы extern в хидере...
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
02.11.2016, 01:46
Лучше, чтобы избегать глобальных переменных, такой способ использовать (на примере моего кода):
C++
1
2
3
4
5
C& getClobalObject()
{
    static C globalobj(1, 2, 3);
    return globalobj;
}
Объект будет создан, в единственном экземпляре, при первом вызове этой функции. Там, где он нужен, просто вызываешь эту функцию. И этот объект не будет маячить в глобальной области, но будет везде доступен через вызов этой функцию. Не нужны ни extern, ни пр.
1
0 / 0 / 0
Регистрация: 06.03.2013
Сообщений: 14
02.11.2016, 01:50  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Лучше, чтобы избегать глобальных переменных, такой способ использовать (на примере моего кода):
C++
1
2
3
4
5
C& getClobalObject()
{
    static C globalobj(1, 2, 3);
    return globalobj;
}
Объект будет создан, в единственном экземпляре, при первом вызове этой функции. Там, где он нужен, просто вызываешь эту функцию. И этот объект не будет маячить в глобальной области, но будет везде доступен через вызов этой функцию. Не нужны ни extern, ни пр.
Мне по своему удобно, но спасибо за совет)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.11.2016, 01:50
Помогаю со студенческими работами здесь

Динамический глобальный объект.
Здравствуйте. Пишу Auto-Clicker . Текущая версия содержит заранее созданный массив объектов класса "TClickBase" в каждом объекте...

Правильно созданный глобальный объект
Необходимо создать создать несколько объектов классов глобально. Я делаю: Создаю h-файл. в нем объявляю(создаю) объекты. И в срр -...

Почему глобальный объект, объявленный до main, конструируется в ней?
Всё просто, имеем код: #include <windows.h> #include <stdio.h> using namespace std; class x { public: x () { printf...

Глобальный член класса
Пишу программу, в которой много классов, и каждый лежит в своем файле. Все работает. Но как только после определения класса я объявляю член...

Почему объект производного класса не видит префиксный оператор из базового класса?
Короче создал я базовый класс с перегруженным префиксным оператором ++. Потом чтоб его затюнинговать, сделал ему производный класс с...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru