18 / 18 / 2
Регистрация: 23.02.2012
Сообщений: 132

Немного не понял описание классов

16.08.2016, 09:05. Показов 1024. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#pragma once
 
#include <QWidget>
#include <QSettings>
 
class QComboBox;
class QCheckBox;
class QTextEdit;
class QLabel;
 
class MyProgram : public QWidget {
    Q_OBJECT
private:
    QSettings m_settings;
    QComboBox* m_pcbo;
};
Что значит вот эти строки:
C++
1
2
3
4
class QComboBox;
class QCheckBox;
class QTextEdit;
class QLabel;
Почему нельзя было сразу подключить QtWidgets, где есть описание этих классов?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.08.2016, 09:05
Ответы с готовыми решениями:

Немного не понял ,написанное тут про инкремент и декремент
Объясните на словах или на примерах .

Немного не понял. Используйте оператор foreach
Немного не понял. :( Если FOR подставить всё работает. Но по заданию нужен foreach. Данные с ним не записываются в массив ...

Еще немного про конструкторы обобщенных классов
Пытаюсь проинициализировать объект обобщенного класса, параметром которого может выступать ссылка. #include &lt;iostream&gt; ...

8
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
16.08.2016, 09:16
А если убрать?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
16.08.2016, 09:20
Цитата Сообщение от Wurgengel Посмотреть сообщение
Что значит вот эти строки:
Предварительное объявление.

Цитата Сообщение от Wurgengel Посмотреть сообщение
Почему нельзя было сразу подключить QtWidgets, где есть описание этих классов?
Чтобы не захламлять пространство имен и не замедлять компиляцию. Конкретные заголовочные файлы подключаются в cpp, а в h оставляют предварительные объявления. Это хорошо работает в тех случаях, когда снаружи не требуется обращения к данным и функциям класса (работа с ними ведется внутри cpp).

Это общепринятый в Qt подход при организации проектов.
2
18 / 18 / 2
Регистрация: 23.02.2012
Сообщений: 132
16.08.2016, 09:28  [ТС]
Спасибо за объяснение.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
16.08.2016, 09:30
DrOffset, как это ускорит компиляцию?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
16.08.2016, 10:47
Цитата Сообщение от nmcf Посмотреть сообщение
как это ускорит компиляцию?
Ты серьезно?!

Допустим есть заголовочный файл А. Который реализует виджет AWidget. Он использует 10 стандартных виджетов. Если мы включаем заголовочные файлы этих 10ти виджетов в заголовочный файл А, а потом используем этот заголовочный файл еще в 20ти единицах трансляции в проекте, то мы получим включение всех 10 стандартных виджетов во все эти места (10*20 дополнительного исходного текста). Компилятору и препроцессору придется обрабатывать все эти включения, даже если они в реальности не нужны. А теперь распространим это на большой проект, скажем, в 500к строк и выше.

Поэтому в Qt предприняты меры (заголовочные файлы самой Qt повсеместно используют эту технику + паттерн pimpl), которые позволяют сокращать время компиляции в таких случаях. Если их придерживаться на постоянной основе, то можно получить достаточно серьезный выигрыш.
2
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
16.08.2016, 11:52
Приведённый пример неудачный. Не похоже, что его будут включать в 20 местах.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
16.08.2016, 11:56
Цитата Сообщение от DrOffset Посмотреть сообщение
Ты серьезно?!
Та же реакция)
Вот ссылка http://stackoverflow.com/quest... tion-times
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
16.08.2016, 12:10
Цитата Сообщение от nmcf Посмотреть сообщение
Приведённый пример неудачный. Не похоже, что его будут включать в 20 местах.
Мое объяснение не касалось примера ТС, я просто привел случай достаточно показательный, чтобы проиллюстрировать проблему лично тебе (эта проблема общая для любого проекта, не только Qt, из-за особенностей компиляции в С++). Поэтому мне твой вопрос показался странным. С насколько большимим и старыми проектами ты сталкивался?

Впрочем, это же только методология. Ты либо следуешь ей, либо нет. Проекты большими становятся не за один день же.
Допустим ты писал как придется, потому что считал, что проект не получится очень большим. Потом ты уволился, поступило дополнение ТЗ, потом еще одно. И вот, спустя 2 года, проект превратился в махину. Но мы не следовали методологии, поэтому нужен будет глобальный рефакторинг для ускорения компиляции и понижения связности модулей. Это цена, в общем-то, которую мы заплатим за запоздалые решения такого плана. Я много работал с такими проектами, и на своей шкуре прочувствовал цену мелких недочетов на раннем этапе, которые спустя годы превратились в огромные проблемы. Поэтому мне понятна задумка Qt-шников и я нахожу ее правильной, даже для маленьких задач.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.08.2016, 12:10
Помогаю со студенческими работами здесь

Описание классов.
Доброй ночи! Помогите с задачкой. Условие: Описать на языке С++ указанный класс. Обеспечить ввод полей класса, создать метод для...

Описание классов
Народ помогите пож-та: Опишите класс MUSEUM (название музея, время работы, стоимость билета, адрес). Введите с клавиатуры данные в...

Описание классов
Как можно выполнить описание классов: 1)&quot;точка&quot; 2) &quot;линия&quot;?

Задача с использованием классов (код и условие внутри, решение кажется слишком простым, возможно не понял условие)
Текст задачи Напишите программу с классом, в котором есть закрытое статическое целочисленное поле начальным нулевым значением. В классе...

Описание классов в Delphi 7
Уважаемые форумчане помогите пожалуйста описать классы контейнера по выданной задаче: Задача «Организация основной памяти» *...


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

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

Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru