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

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

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

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

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

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

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

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

Программа на описание классов - C++
Помогите плиз создать прогу: Описать класс, содержащий строковое поле, целочисленное поле и указатель на массив вещественных чисел....

Отделить описание шаблонных функций и классов от реализации - C++
скажите можно ли как то все таки отделить описание шабонных функций и классов от реализации? уж больно неудобно всю рализацию в h-нике...

Описание двух "пересекающихся" классов - C++
Как сделать два класса в которых методы используют параметры с типами друг-друга class c1 { public: int param; int...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
nmcf
5310 / 4630 / 1550
Регистрация: 14.04.2014
Сообщений: 18,437
16.08.2016, 09:16 #2
А если убрать?
DrOffset
7095 / 4236 / 951
Регистрация: 30.01.2014
Сообщений: 7,012
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
5310 / 4630 / 1550
Регистрация: 14.04.2014
Сообщений: 18,437
16.08.2016, 09:30 #5
DrOffset, как это ускорит компиляцию?
DrOffset
7095 / 4236 / 951
Регистрация: 30.01.2014
Сообщений: 7,012
16.08.2016, 10:47 #6
Цитата Сообщение от nmcf Посмотреть сообщение
как это ускорит компиляцию?
Ты серьезно?!

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

Поэтому в Qt предприняты меры (заголовочные файлы самой Qt повсеместно используют эту технику + паттерн pimpl), которые позволяют сокращать время компиляции в таких случаях. Если их придерживаться на постоянной основе, то можно получить достаточно серьезный выигрыш.
nmcf
5310 / 4630 / 1550
Регистрация: 14.04.2014
Сообщений: 18,437
16.08.2016, 11:52 #7
Приведённый пример неудачный. Не похоже, что его будут включать в 20 местах.
rikimaru2013
C++ Game Dev
2429 / 1123 / 240
Регистрация: 30.11.2013
Сообщений: 3,673
16.08.2016, 11:56 #8
Цитата Сообщение от DrOffset Посмотреть сообщение
Ты серьезно?!
Та же реакция)
Вот ссылка http://stackoverflow.com/questions/3...pilation-times
DrOffset
7095 / 4236 / 951
Регистрация: 30.01.2014
Сообщений: 7,012
16.08.2016, 12:10 #9
Цитата Сообщение от nmcf Посмотреть сообщение
Приведённый пример неудачный. Не похоже, что его будут включать в 20 местах.
Мое объяснение не касалось примера ТС, я просто привел случай достаточно показательный, чтобы проиллюстрировать проблему лично тебе (эта проблема общая для любого проекта, не только Qt, из-за особенностей компиляции в С++). Поэтому мне твой вопрос показался странным. С насколько большимим и старыми проектами ты сталкивался?

Впрочем, это же только методология. Ты либо следуешь ей, либо нет. Проекты большими становятся не за один день же.
Допустим ты писал как придется, потому что считал, что проект не получится очень большим. Потом ты уволился, поступило дополнение ТЗ, потом еще одно. И вот, спустя 2 года, проект превратился в махину. Но мы не следовали методологии, поэтому нужен будет глобальный рефакторинг для ускорения компиляции и понижения связности модулей. Это цена, в общем-то, которую мы заплатим за запоздалые решения такого плана. Я много работал с такими проектами, и на своей шкуре прочувствовал цену мелких недочетов на раннем этапе, которые спустя годы превратились в огромные проблемы. Поэтому мне понятна задумка Qt-шников и я нахожу ее правильной, даже для маленьких задач.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2016, 12:10
Привет! Вот еще темы с ответами:

Описание классов. Класс "Угол" - C++
Опишите класс &quot;Угол&quot; для измерения углов. Данные класса : число градусов и минут Методы класса : должны обеспечить минимальную...

Описание классов. Классы "Шар" и "Ящик для шаров" - C++
1.Опишите класс &quot;шар&quot;, описывающий габариты и вес. Данные класса: радиус шара,вес. Методы класса: должны обеспечить минимальную...

Где пишется описание для выходного файла .exe (например описание процесса) - C++
Консольный проект, скомпилировали, получили exe. Жмем правой кнопкой на нем\свойства\вкладка подробно, почти все описание exe файла...

Не понял ошибку - C++
#include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; int main(int argc, char* argv) { float...


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

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

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