Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Я в этом не шарю
 Аватар для Segaman
4 / 4 / 3
Регистрация: 03.09.2014
Сообщений: 191

Есть ли способ, зная ссылку на класс, использовать его значения без запроса по ссылке?

19.11.2014, 11:45. Показов 2322. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
скажем есть 2 класса
C++
1
2
3
4
5
6
7
8
9
class ItemList
{
public:
    ItemList();
    int   item[48];
    int   count;
 
    Func*func;
}
и
C++
1
2
3
4
5
6
7
8
class Func
{
public:
    Func(ItemList*itemlist);
    ItemList*itemlist;
    bool AddItem(int id);
    void Clear();
}
при объявлении ItemList внутри него объявляется Func, которому отправляется ссылка на класс ItemList .
можно ли в функциях Func обращаться к данным и функциям из ItemList не обращаясь постоянно к ссылке itemlist?
т.е. вот так
C++
1
2
3
4
5
6
bool AddItem(int id)
{
    if (count>=48)return false;
    item[count++]=id;
    return true;
}
нужно это для того, чтобы класс ItemList содержал только данные, потому как функций обработки этих данных тьма тмущая и добавление новых вызывает компиляцию почти всей программы.
есть using namespace std, но я не знаю как это работает. я - самоучка.

Добавлено через 5 минут
даже чтобы ItemList был struct
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.11.2014, 11:45
Ответы с готовыми решениями:

Есть ли способ использовать оператор And в операторе Rlike? (mysql)
Нужно чтобы в ответ на mysql запрос select N, f1 from bibl.data where f1 Rlike 'федотов AND грачев' выводило записи, в которых...

Использовать массивы или есть более элегантный способ?
Пишу игру. Есть предметы которые выпадают из монстров. Например: золото, аптечка, автомат и т.д. У каждого предмета есть шанс его...

Корректно ли использовать ссылку без контента?
Доброго времени. Корректно ли использовать ссылку без контента? a::after {content: "Читать далее";} <a...

32
655 / 576 / 164
Регистрация: 13.12.2012
Сообщений: 2,126
04.12.2014, 16:11
Студворк — интернет-сервис помощи студентам
ну,а чем Вас результат не устроил?
можно вот так сократить
C++
1
2
3
4
ReadStr(int strnum, char*, )//тут еще переменные добавить
{
file->ReadStr(file->Number(file->ReadPos(4, isresult->seek+17), 4), NUL);
}
0
Я в этом не шарю
 Аватар для Segaman
4 / 4 / 3
Регистрация: 03.09.2014
Сообщений: 191
08.12.2014, 10:00  [ТС]
aLarman, тем, что мне интересна реализация.
я между классами обмениваюсь ссылками и много чего подключаю, только ради одной функции.
а я хочу передавать ссылки на функции без лишних подключений.
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
08.12.2014, 10:07
Segaman, ссылка вообще не может ссылаться на тип, а значит и на класс. Ссылка ведёт себя как неявно разыменуемый указатель, а указатель должен быть на что то конкретное. Вот представь себе: едешь ты по дороге, а там дородные указатели, на одном написано "Москва там", на другом "А Бологое там". на третьем "А от там Питербрург" и вдруг вместо указателя на Ростов указатель без стрелки, на котором написано просто "населенный пункт". Вот этот последний - указатель на тип населённого пункта вообще. Как посмотришь на того, кто его ставил? Не ужели как на идиота? А надо бы, как на себя.
0
Я в этом не шарю
 Аватар для Segaman
4 / 4 / 3
Регистрация: 03.09.2014
Сообщений: 191
10.12.2014, 10:23  [ТС]
столкнулся с новой проблемой.
активно использую ItemList & itemlist, но временами во время запросов по этой ссылке программа просто падает.
я вычислил, что это происходит именно из-за запроса по этой ссылке. проверил адреса, совпадают.
в чем может быть проблема?
0
655 / 576 / 164
Регистрация: 13.12.2012
Сообщений: 2,126
10.12.2014, 10:26
объект на которого ссылается ссылка был уничтожен, например
0
Я в этом не шарю
 Аватар для Segaman
4 / 4 / 3
Регистрация: 03.09.2014
Сообщений: 191
11.12.2014, 09:54  [ТС]
aLarman, возможно. щас проверю
0
Я в этом не шарю
 Аватар для Segaman
4 / 4 / 3
Регистрация: 03.09.2014
Сообщений: 191
13.12.2014, 14:43  [ТС]
всё верно. объект и правда уничтожался.
спасибо.
есть еще вопрос.
скажем у меня в одном .cpp (не знаю как правильно называть) есть переменная int canedit.
в другом я создаю с таким же именем, но компиль при сборке ругается на то, что переменная встречается 2 раза.
-как можно сделать, чтобы у каждого был свой canedit
-как сделать, чтобы canedit был в одном cpp, а в других была ссылка на него?

и еще интересно про существование этих переменных.
т.е. в каждом cpp есть свои переменные. при запуске программы они сразу создаются и сидят в памяти, пока работает программа или как-то по другому?

вот пример
C++
1
2
3
4
5
6
#include "main.h"
int canedit;
void Init()
{
canedit = false;
}
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
13.12.2014, 14:46
Цитата Сообщение от Segaman Посмотреть сообщение
-как можно сделать, чтобы у каждого был свой canedit
static int canedit; в каждом нужном cpp. В каждом будет свой экземпляр canedit.
Или еще можно поместить ее в безымянный namespace.

Цитата Сообщение от Segaman Посмотреть сообщение
-как сделать, чтобы canedit был в одном cpp, а в других была ссылка на него?
В нужно cpp пишешь int canedit; В остальных extern int canedit;

Читай про связывание в С++.

Цитата Сообщение от Segaman Посмотреть сообщение
при запуске программы они сразу создаются и сидят в памяти, пока работает программа
Да.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
13.12.2014, 14:53
Цитата Сообщение от DrOffset Посмотреть сообщение
В нужно cpp пишешь int canedit; В остальных extern int canedit;
ТС, если вы используете этот сишный рудимент, то вы получите зависимость от порядка инициализации единиц трансляций.

В этом случае вам нужно будет иметь ввиду: до запуска функции main жизни нет.
В противном случае вы можете поиметь весьма причудливые баги.


Есть альтернативный вариант: использование локальных статических переменных.
Этот способ дает безопасность, стабильность, и автоматику при работе с сингелтонами.

Но этот способ подразумевает, что для того, что бы получить доступ к локально-статическим данным, необходимо вызвать функцию, которая вернет ссылку на данные.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
13.12.2014, 15:28
hoggy, может быть стоит это рассказывать обращаясь к ТС, а не ко мне?
Уведомление о твоем ответе не дойдет до ТС, соответственно он может никогда его не увидеть.
0
Я в этом не шарю
 Аватар для Segaman
4 / 4 / 3
Регистрация: 03.09.2014
Сообщений: 191
13.12.2014, 16:59  [ТС]
hoggy, DrOffset, по вашим словам я решил, что нужно писать static int & canedit в разных cpp, сделать к каждому Init(int _canedit), который укажет ссылку и вызывать из главного cpp.
проблема в том что компиль меня ругает
error: 'canedit' declared as reference but not initialized
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
13.12.2014, 17:17
Цитата Сообщение от Segaman Посмотреть сообщение
hoggy, DrOffset, по вашим словам я решил, что нужно писать static int & canedit
Я не давал повода так думать.


в hpp файле:
C++
1
2
#pragma once
int& foo();  //<---- доступ к глобальным данным через функцию
в cpp фалйе
C++
1
2
3
4
5
// глобальная переменная объявляется, как локальный статик.
// что гарантирует независимость от порядка инициализации единиц трансляций.
// с++11 так же гарантирует безопасность инициализации локального статика
// в многопоточной среде.
int& foo() { static int v = 0; return v; }
0
Я в этом не шарю
 Аватар для Segaman
4 / 4 / 3
Регистрация: 03.09.2014
Сообщений: 191
17.12.2014, 16:04  [ТС]
помогла вот эта статья
Особенности использования extern и static в C/C++
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.12.2014, 16:04

Как удалить GET параметры в ссылке, и сразу новую, удалённую ссылку, без перезагрузки страницы, отразить на сайте?
Есть такой код: if($_GET==10) { if (empty($_SESSION) and empty($_SESSION)) { echo '&lt;script&gt;...

Как получить id элемента, зная только его класс?
Приветствую товарищи! Пожалуйста, помогите мне с решением одной задачи. У меня есть такой код: &lt;button...

Вывод значения DisplayMember, зная его ValueMember
Возникла проблема. Есть 3 combobox и бд. Все три имеют &quot;общий&quot; ValueMember и различный DisplayMember. Как изменить в двух других...

Как можно объявить класс, заранее не зная его тип template.
Класс: template &lt;class type&gt; class My { private: int n; double sum; type *al; public: My() { al =...

Есть ли способ изменить значения в массиве за одну операцию?
Здравствуйте, недавно начал осваивать Си. Изучил K&amp;R, полистал несколько разных мануалов. Нигде не увидел ответа на простой вопрос: есть ли...


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

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru