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

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

Войти
Регистрация
Восстановить пароль
 
Wurgengel
13 / 13 / 1
Регистрация: 23.02.2012
Сообщений: 66
#1

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

16.08.2016, 09:05. Просмотров 165. Ответов 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, где есть описание этих классов?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
5122 / 4442 / 1481
Регистрация: 14.04.2014
Сообщений: 17,629
16.08.2016, 09:16     Немного не понял описание классов #2
А если убрать?
DrOffset
6917 / 4110 / 939
Регистрация: 30.01.2014
Сообщений: 6,905
16.08.2016, 09:20     Немного не понял описание классов #3
Цитата Сообщение от Wurgengel Посмотреть сообщение
Что значит вот эти строки:
Предварительное объявление.

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

Это общепринятый в Qt подход при организации проектов.
Wurgengel
13 / 13 / 1
Регистрация: 23.02.2012
Сообщений: 66
16.08.2016, 09:28  [ТС]     Немного не понял описание классов #4
Спасибо за объяснение.
nmcf
5122 / 4442 / 1481
Регистрация: 14.04.2014
Сообщений: 17,629
16.08.2016, 09:30     Немного не понял описание классов #5
DrOffset, как это ускорит компиляцию?
DrOffset
6917 / 4110 / 939
Регистрация: 30.01.2014
Сообщений: 6,905
16.08.2016, 10:47     Немного не понял описание классов #6
Цитата Сообщение от nmcf Посмотреть сообщение
как это ускорит компиляцию?
Ты серьезно?!

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

Поэтому в Qt предприняты меры (заголовочные файлы самой Qt повсеместно используют эту технику + паттерн pimpl), которые позволяют сокращать время компиляции в таких случаях. Если их придерживаться на постоянной основе, то можно получить достаточно серьезный выигрыш.
nmcf
5122 / 4442 / 1481
Регистрация: 14.04.2014
Сообщений: 17,629
16.08.2016, 11:52     Немного не понял описание классов #7
Приведённый пример неудачный. Не похоже, что его будут включать в 20 местах.
rikimaru2013
C++ Game Dev
2399 / 1093 / 237
Регистрация: 30.11.2013
Сообщений: 3,620
16.08.2016, 11:56     Немного не понял описание классов #8
Цитата Сообщение от DrOffset Посмотреть сообщение
Ты серьезно?!
Та же реакция)
Вот ссылка http://stackoverflow.com/questions/3...pilation-times
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2016, 12:10     Немного не понял описание классов
Еще ссылки по теме:
Не понял ошибку C++
не понял. битовые поля C++
C++ Правильно ли я понял условие ?
Разбираю списки .Правильно ли понял ? C++
объясните задачу, ничего не понял C++

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

Или воспользуйтесь поиском по форуму:
DrOffset
6917 / 4110 / 939
Регистрация: 30.01.2014
Сообщений: 6,905
16.08.2016, 12:10     Немного не понял описание классов #9
Цитата Сообщение от nmcf Посмотреть сообщение
Приведённый пример неудачный. Не похоже, что его будут включать в 20 местах.
Мое объяснение не касалось примера ТС, я просто привел случай достаточно показательный, чтобы проиллюстрировать проблему лично тебе (эта проблема общая для любого проекта, не только Qt, из-за особенностей компиляции в С++). Поэтому мне твой вопрос показался странным. С насколько большимим и старыми проектами ты сталкивался?

Впрочем, это же только методология. Ты либо следуешь ей, либо нет. Проекты большими становятся не за один день же.
Допустим ты писал как придется, потому что считал, что проект не получится очень большим. Потом ты уволился, поступило дополнение ТЗ, потом еще одно. И вот, спустя 2 года, проект превратился в махину. Но мы не следовали методологии, поэтому нужен будет глобальный рефакторинг для ускорения компиляции и понижения связности модулей. Это цена, в общем-то, которую мы заплатим за запоздалые решения такого плана. Я много работал с такими проектами, и на своей шкуре прочувствовал цену мелких недочетов на раннем этапе, которые спустя годы превратились в огромные проблемы. Поэтому мне понятна задумка Qt-шников и я нахожу ее правильной, даже для маленьких задач.
Yandex
Объявления
16.08.2016, 12:10     Немного не понял описание классов
Ответ Создать тему
Опции темы

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