Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Valdis
1

Как использовать экземпляры классов МFC?

30.10.2007, 10:21. Просмотров 1158. Ответов 3
Метки нет (Все метки)

Такая проблема:
С помощью MFC AppWizard создал проект, в котором редактируется некая древо-структура.
Есть класс СMyDoc, который сохраняет нужную структуру данных:
C++
1
2
3
4
5
6
7
8
struct Tree
{
    int linkTo[10];
    int linkFrom[10];
    int linksTo;
    int linksFrom;
    CString name;
}
Объявил в этом же классе в файле MyDoc.h переменную этой структуры Tree tree.
В функции CMyDoc::Serialize(...) сохраняю структуру.

Другой класс - CTreeDialog, в котором отображается вся структура.
Экзкмпляр этого класса объявляется в классе CMainFrame как theTree для того чтобы диалоговое окошко отображалось с помощью класса CControlBar как docking window.

Вот в чём дело: как мне использовать этот самый экземпляр theTree в каком-нибудь другом классе (например в СMyDoc) если я не могу найти тот единственный экземпляр класса CMainFrame, который используется в моей программе чтобы увидеть экземпляр CTreeDialog - theTree?

И вообще проблема в использовании классов автоматически созданных мастером App Wizard. Как увидеть их экземпляры, где они?
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.10.2007, 10:21
Ответы с готовыми решениями:

Как поместить в STL-контейнер экземпляры разных классов?
Как поместить в контейнер экземпляры разных классов(типов) :thank_you:?

Как разбить строку в МFC?
Такая ситуация (в продолжении темы о базе(кто читал)) Имеется строка в txt файле с...

Map, List, работа со ссылками на экземпляры классов
Здравствуйте! Есть такой вопрос: если ли разница в том, каким образом делать .push_back(buf) в...

Создать экземпляры разных производных классов в зависимости от условий
нужно дописать программу. если длинна колесной базы равна 4500 и количество дверей - 2 тогда ето...

3
Brother
30.10.2007, 10:39 2
'Вот в чём дело: как мне использовать этот самый экземпляр theTree в каком-нибудь другом классе (например в СMyDoc) если я не могу найти тот единственный экземпляр класса CMainFrame, который используется в моей программе чтобы увидеть экземпляр CTreeDialog - theTree?'

Всем классам, кто хочет воспользоваться theTree, как вариант, передавай (в конструкторе?) указатель/ссылку на theTree.
Вообще твоя программа - модель решаемой задачи! - превалирует над графическим ее отображением. Не пихай данные и алгоритмы задачи в классы, ответсвенные всего лишь за отображение...

'И вообще проблема в использовании классов автоматически созданных мастером App Wizard. Как увидеть их экземпляры, где они?'

Экземпляры не создаются автоматически, кроме CWinApp (а он создается в соответствующем .срр файле). Wizard создет лишь классы, и ничего более.
Kажется так
Brother
30.10.2007, 12:09 3
[пришло по электронной почте от Valdis]

Получил ответ, но!

Если использовать указатель на мой thtTree, то другие классы его могут увидеть лишь используя экземпляр
класса CMainFrame, где theTree объявлен.
Ну, сделаю я:

C++
1
2
CMainFrame* mFrame;
mFrame = new CMainFrame;
или
C++
1
CMainFrame mFrame;
затем использую mFrame->theTree..... или mFrame.theTree,

но этот mFrame - новый экземпляр, а не тот самый, который ответственен за работу окон в моей программе!
Как быть?
Ответь, please!

[отвечаю ]
Первое, отфонарное... Объяви theTree в классе как static. Это будет означать, что ты хочешь иметь единственный экземпляр theTree для всех экземпляров mFrame.
Но - лучший ли это вариант?
Дело в том, что ты пытаешься смешать вместе данные программы ('бизнес-логику') с отображением данных на экран. А это не очень-то хорошо. Задай себе вопрос : являентся ли theTree *частью* окна или theTree лишь *отображается* пользователю в этом окне.
Если второе, то надо делать как-то так:
C++
1
2
3
4
5
6
7
8
mFrame{
  mFrame(..., Tree *pTree)
  ...
  CTree *pTheTree;
}
 
Tree MyTree;
mFrame MainFrame(..., &MyTree);
(это так, образно говоря, конечно...)

Другими словами, те данные, с которыми необходимо работать много кому, нездорово делать членом какого-то одного класса, специально к тому не предназначенного, и затем ломать голову, как к нему подступиться.
(Конечно, это не безусловное правило, но в целом его неплохо придерживаться)
Очень рекомендую на тему проектирования книгу Гради Буча 'Объектно-ориентированный анализ и проектирование' - сам читал с удовольствием. Можно сказать, классика ООП.
0 / 0 / 0
Регистрация: 11.05.2014
Сообщений: 10
11.05.2014, 14:13 4
Экземпляры классов используются методом наследования
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.05.2014, 14:13

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как положить в массив экземпляры классов?
Здравствуйте! Есть задача. У меня есть 2 класса FixedMonthlyCostPaidService и ...

Как сохранить экземпляры классов в один массив ?
Ребята, привет. Подскажите, пожалуйста, как решить задачу. Есть абстрактный класс. Есть два...

Как сериализовать/десериализовать экземпляры классов в файл
Проблема следующая: Имеется три класcа: class Class1 { // Список полей и методов } class...

Как случайным образом вывести экземпляры двух классов?
Выходит ошибка о том что класс не может конвертироваться в инт public void StartRun(Driver...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.