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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Valdis
Сообщений: n/a
#1

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

30.10.2007, 10:21. Просмотров 957. Ответов 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. Как увидеть их экземпляры, где они?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2007, 10:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как использовать экземпляры классов МFC? (C++):

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

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

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

Как использовать наследников от стандартных классов? Например, CMyEdit? - C++
Я начал изучать MFC. Программа - простой диалог со строкой ввода. Диалог со строкой ввода нарисовал как ресурс. Мне нужно в clipboard...

Как создавать конструкторы, что бы использовать переменные из любых классов? - C++
В общем пишу программку, суть в том , что я должен научиться спокойно использовать переменные из разных классов в разных классах и в int...

Как использовать функцию класса в другом классе (ни один из классов не наследует другой)? - C++
функция в классе в котором она прописана объявлена как паблик. void auction::rvectoroldtime(int oldtime1, double low, double high ) { ...

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

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

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

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

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

Как перебрать все экземпляры класса? - C++
Здравствуйте! Я начинающий программист..... может и не программист вовсе. Но мне необходимо сделать такую задачу. С классами начала...

Как лучше сделать хранение ссылок на экземпляры класса? - C++
есть необходимость зранить все созданные экземпляры класса придумал сдделать это с помощью статического списка - ничего не вышло - ошибка...

Реализовать иерархию классов (использовать наследование, полиморфизм, виртуальные функции) - C++
Первый базовый класс – млекопитающие; поля – способ питания, вес, среда обитания. Во втором базовом классе описываются географические...

В зависимости от выбора пользователя, инициализировать один из классов-наследников и использовать только его - C++
Всем здрасьте. У меня такая ситуация: Есть класс-родитель: Main Есть много классов-наследников: One, Two, Three, Four .... и т.д. ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.05.2014, 14:13
Ответ Создать тему
Опции темы

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