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

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

30.10.2007, 10:21. Показов 1543. Ответов 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. Как увидеть их экземпляры, где они?
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.10.2007, 10:21
Ответы с готовыми решениями:

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

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

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

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

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

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

Экземпляры не создаются автоматически, кроме CWinApp (а он создается в соответствующем .срр файле). Wizard создет лишь классы, и ничего более.
Kажется так
Brother
30.10.2007, 12:09
[пришло по электронной почте от 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
Экземпляры классов используются методом наследования
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.05.2014, 14:13
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru