Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Valdis
Сообщений: n/a
30.10.2007, 10:21     Как использовать экземпляры классов МFC? #1
Такая проблема:
С помощью 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. Как увидеть их экземпляры, где они?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2007, 10:21     Как использовать экземпляры классов МFC?
Посмотрите здесь:

Как использовать функцию класса в другом классе (ни один из классов не наследует другой)? C++
Разные экземпляры класса ? C++
C++ Как использовать наследников от стандартных классов? Например, CMyEdit?
C++ Как разбить строку в МFC?
Отсутствуют экземпляры конструктора C++
C++ как лучше сделать хранение ссылок на экземпляры класса?
C++ Построить отрезок между двумя точками, определенными как экземпляры класса Point
C++ Как создавать конструкторы, что бы использовать переменные из любых классов?
В зависимости от выбора пользователя, инициализировать один из классов-наследников и использовать только его C++
C++ LU разложение - отсутствуют экземпляры конструктора
Как поместить в STL-контейнер экземпляры разных классов? C++
C++ Реализовать иерархию классов (использовать наследование, полиморфизм, виртуальные функции)

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Brother
Сообщений: n/a
30.10.2007, 10:39     Как использовать экземпляры классов МFC? #2
'Вот в чём дело: как мне использовать этот самый экземпляр theTree в каком-нибудь другом классе (например в СMyDoc) если я не могу найти тот единственный экземпляр класса CMainFrame, который используется в моей программе чтобы увидеть экземпляр CTreeDialog - theTree?'

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

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

Экземпляры не создаются автоматически, кроме CWinApp (а он создается в соответствующем .срр файле). Wizard создет лишь классы, и ничего более.
Kажется так
Brother
Сообщений: n/a
30.10.2007, 12:09     Как использовать экземпляры классов МFC? #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);
(это так, образно говоря, конечно...)

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

Текущее время: 22:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru