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

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

16.08.2016, 09:05. Показов 996. Ответов 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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru