| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Взять значение из другого класса? |
| Автор: vdm 5.3.2008, 09:43 |
| Есть класс А в нем есть public переменная значение которой я указываю сам. Есть класс Б в котором я должен взять значение из класса А, но когда беру значение, выдаёт то, которое устанавливается конструктором. Как поправить, чтобы выдавало то которое я сам уже установил? |
| Автор: andrew_121 5.3.2008, 09:45 |
| Брось кусок кода... |
| Автор: vdm 5.3.2008, 10:02 | ||
А без кода никак? опиши общий вариант, если знаешь ответ? |
| Автор: andrew_121 5.3.2008, 10:06 |
| Вот тебе нужна помощь, а мне приходиться за тебя писать фрагмент кода который ты по каким-то причинам писать нехочешь. Несправедливо... |
| Автор: Fazil6 5.3.2008, 12:29 |
банальная ошибка в 17-й строке. |
| Автор: Mayk 5.3.2008, 12:32 |
здесь можно только предполагать. а вдруг потом окажется что догадка не верна(а ведь оно так наверное и есть)? так что нужен отрывок кода на котором даная трабла воспроизводится. |
| Автор: andrew_121 5.3.2008, 12:52 |
| Тебе-то всего 4-и строки из каждого класса выдрать надо, не переживай, 8-м строк у тя никто не украдет !!! |
| Автор: orthrus 5.3.2008, 14:08 |
| vdm,не выкладывай тут код, за ним все охотятся и обязательно его у тебя украдут |
| Автор: vdm 5.3.2008, 14:59 | ||
Да нет, ребята, не в том дело что украдут, просто какой именно вам отрывок нужен? |
| Автор: baldina 5.3.2008, 15:01 | ||
|
| Автор: vdm 5.3.2008, 15:23 |
| В общем вопрос звучит так: class CW { public: CW(void); ~CW(void); long cvrshow(void) long cnr2; } long cvrshow(void) { return cnr2; } при нажатии какойто кнопки присвоил значение cnr2 class CPlaneScene { public: CPlaneScene(); virtual ~CPlaneScene(); CW p_CW; } long a = p_CW.cvrshow(); Но почемуто вызывает заново конструктор класса CW и значение теряется. Почему? |
| Автор: baldina 5.3.2008, 15:26 | ||
vdm, выложи
и укажи, что в каком классе определено (контекст). Вызов конструктора наводит на мысль о временном объекте. Добавлено через 3 минуты и 7 секунд
вот это где и как вызывается? |
| Автор: andrew_121 5.3.2008, 15:37 | ||||
| Эй, это че-за детский сад. long cnr2 - принадлежиn CW
p_CW - принадлежит CPlaneScene
Читай - Члены класса. |
| Автор: vdm 5.3.2008, 17:00 | ||||||
|
| Автор: Alek86 5.3.2008, 17:12 |
| значение переменной находится не в классе, а в объекте класса. чтобы разъяснить, чем объекты от классов отличаются, автору необходимо почитать учебники по С++ |
| Автор: mes 5.3.2008, 17:18 | ||
судя по префиксу p_ переменная p_CW должна быть объявлена как указатель В таком случае если бы ты связал с объектом c_CW (class C1) то тогда бы у тебя бы был доступ через обе переменные к одному и тому же объекту а так у тебя два различных объекта и соответственно данные в них разные... Добавлено через 1 минуту и 58 секунд
присоединяюсь.. плюс почитать про указатели и понять разницу между ним и ссылкой. |
| Автор: baldina 5.3.2008, 17:23 |
| vdm, у тебя две переменных типа CW: одна в экземпляре класса C1 другая - в CPlaneScene. Устанавливаешь значение в одной, а используешь в другой, потому и не работает. Если тебе надо, что бы С1 и CPlaneScene разделяли один объект типа CW, в одном из этих классов ты должен хранить не объект, а ссылку или указатель на общий объект. Если ты хочешь, что бы для всех экземпляров класса CW переменная cnr2 была лишь одна, объяви её как static. В этом случае обращение к ней будет не через объект, а через имя класса: CW::cnr2. |
| Автор: vdm 5.3.2008, 18:02 | ||
////// Если тебе надо, что бы С1 и CPlaneScene разделяли один объект типа CW, в одном из этих классов ты должен хранить не объект, а ссылку или указатель на общий объект. ////// Как это должно выглядить в моём случае, подскажи пожалуйста? |
| Автор: mes 6.3.2008, 01:39 | ||
не в тему.. но глаз мозолит.. старайся не использовать данные в секции public: запихивай их в приват... вариантов масса ...вот один:
в приведенный примере программисту самому придется следить за длиной жизни обших данных... (Чтоб указатель не показывал случайно на удаленный объект) для более детального изучения проблемы все таки тебе придется почитать книжку , )) так как расписывать здесь тоже самое нет смысла... только время потратится.. п.с. кстати что именно тебе нужно из твоего примера не понятно.. вполне может быть, что сможешь обойтись статической переменной |
| Автор: baldina 6.3.2008, 16:31 | ||||
Это только ты знаешь. Это вопрос проектирования, а не программирования. Что бы сделать грамотно, нужно понять что за задачу ты решаешь, какова роль этой переменной. Для владельца классов, описание которых составляет от 300 до 600 строк это особенно актуально. Технику mes тебе показал. Ход возможных рассуждений проиллюстрирую на примере: Предположим CW это класс состояния некоего объекта, С1 - тип объекта, к которому может быть применено состояние , CPlaneScene - класс, управляющий объектами типа С1, в т.ч. их состоянием. Значит объект типа CPlaneScene имеет состояние и применяет их для объектов типа С1. Предположим, что у всех С1 состояние одинаковое, определяемое CPlaneScene. Тогда получается следующее:
|