Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> include, зачем так писать 
:(
    Опции темы
aspirin2003
Дата 21.8.2008, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 18.3.2007
Где: Саратов

Репутация: нет
Всего: нет



Уже в нескольких примерах видел такую вот конструкцию - зачем то после инклудов те же самые классы еще и и описывают вот так:
Код

 #include <QtGui/QWidget>
 #include <QtNetwork/QAbstractSocket>
 #include <QtNetwork/QSslSocket>

 class QSslSocket;
 class QToolButton;
 class Ui_Form;


Вопрос - зачем так делают?
PM MAIL   Вверх
Annihilator
Дата 21.8.2008, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

Репутация: 1
Всего: 3



Надо смотреть по коду. Могу предположить, что то что ты видел, это классы, объявляющиеся для так называемого опережающего объявления. Допустим

Код

class C2;
class C1
{
    friend int foo(C1 a, C2, b);
    .  .  .  .  .  .  .  .  .
}
 class C2
{
    friend int foo(C1 a, C2, b);
    .  .  .  .  .  .  .  .  .
}


Т.е. объявляется функция-друг для обоих классов. Но по-началу, о втором классе ничего не известно, поэтому надо написать некий прототип его: 
Код

classC2


Это сообщение отредактировал(а) Annihilator - 21.8.2008, 15:01


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
Djinn
Дата 21.8.2008, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 18.5.2007

Репутация: нет
Всего: 1



Annihilator, Но ведь классы в библиотеках обьявлены раньше этих обьявлений...
Код

 #include <QtGui/QWidget>
 #include <QtNetwork/QAbstractSocket>
 #include <QtNetwork/QSslSocket>

 class QSslSocket;
 class QToolButton;
 class Ui_Form;

сначала обьявление в инклудах с описанием, потом опять же обьявление их... зачем так делать ? о_О толку ж ноль...
PM MAIL   Вверх
Annihilator
Дата 21.8.2008, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

Репутация: 1
Всего: 3



а можно ссылку на эти примеры


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
bsa
Дата 21.8.2008, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



aspirin2003, возможно, хотели сделать так:
Код
#include <QtGui/QWidget>
class QSslSocket;
class QToolButton;

class MyWidget : public QWidget
{
     Q_OBJECT
public:
...
private:
     QToolButton *button1_;
     QSslSocket *socket_;
};
Так как это компилируется быстрее, чем в случае подключения заголовков.
Но в какой-то момент, возникла необходимость использовать не указатель на объект, а сам объект, и пришлось подключать заголовок...
Конечно, не исключен вариант, когда писал кто-то неопытный, не думая копировал все, что есть в примерах...
PM   Вверх
aspirin2003
Дата 21.8.2008, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 18.3.2007
Где: Саратов

Репутация: нет
Всего: нет



Пример из Qt Examples & Demos, называется Secure Socket Client
PM MAIL   Вверх
Djinn
Дата 21.8.2008, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 18.5.2007

Репутация: нет
Всего: 1



Цитата(bsa @ 21.8.2008,  16:05)
aspirin2003, возможно, хотели сделать так:
Код
#include <QtGui/QWidget>
class QSslSocket;
class QToolButton;

class MyWidget : public QWidget
{
     Q_OBJECT
public:
...
private:
     QToolButton *button1_;
     QSslSocket *socket_;
};
Так как это компилируется быстрее, чем в случае подключения заголовков.
Но в какой-то момент, возникла необходимость использовать не указатель на объект, а сам объект, и пришлось подключать заголовок...
Конечно, не исключен вариант, когда писал кто-то неопытный, не думая копировал все, что есть в примерах...

Я немного не понял, как это не подключили заголовки с классом, но обьявили его ?  smile обьясните плз  smile 

Это сообщение отредактировал(а) Djinn - 21.8.2008, 16:30
PM MAIL   Вверх
bsa
Дата 21.8.2008, 16:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Djinn @ 21.8.2008,  16:30)
Я немного не понял, как это не подключили заголовки с классом, но обьявили его ?  smile обьясните плз  smile

Так. Срочно читать книжку по С++ (можно и по Си) для начинающих.  smile 

когда ты делаешь
Код
class ClassName;
То дальше можешь спокойной использовать указатели и ссылки на ClassName. Это называет предварительное объявление (ты говоришь компилятору, что где-то в программе определяется класс ClassName, но сейчас ты его определение предоставить не можешь). И все будет до тех пор, пока ты не попытаешься получить доступ к внутренним членам или размеру объекта класса (в этом случае уже нужен полный интерфейс класса).
PM   Вверх
Djinn
Дата 21.8.2008, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 18.5.2007

Репутация: нет
Всего: 1



bsa, это я знал smile я не об этом... но может я просто не знаю qt... ладно, поживем - увидем smile спасибо большое smile
PM MAIL   Вверх
Sartorius
Дата 21.8.2008, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 2
Всего: 37



ИМХО в демонстрационных целях  smile  Что б показать какие классы теперь доступны

Второй вариант проект генерился из RationalRose она некоторые зависимости раскрывает как упреждающее описание, а человек потом соответственно инклуды добавил

Это сообщение отредактировал(а) Sartorius - 21.8.2008, 17:23
PM MAIL ICQ   Вверх
Djinn
Дата 21.8.2008, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 18.5.2007

Репутация: нет
Всего: 1



Цитата(Sartorius @  21.8.2008,  17:22 Найти цитируемый пост)
а человек потом соответственно инклуды добавил


 smile как по мне бред однако... но спасибо smile возможно и бывает такое smile
PM MAIL   Вверх
bsa
Дата 21.8.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Djinn @ 21.8.2008,  17:27)
smile как по мне бред однако... но спасибо smile возможно и бывает такое smile

Я не вижу никакого бреда. Ну добавил он инклюды. А предопределения убрать забыл. Это не криминал...
PM   Вверх
Djinn
Дата 21.8.2008, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 18.5.2007

Репутация: нет
Всего: 1



Цитата(bsa @  21.8.2008,  17:42 Найти цитируемый пост)
Я не вижу никакого бреда. Ну добавил он инклюды. А предопределения убрать забыл. Это не криминал...


Я про то что показывать что бы сделали инклуд... но почему бы его самим раньше не сделать ? smile я про этот бред... smile
PM MAIL   Вверх
bsa
Дата 21.8.2008, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Djinn @ 21.8.2008,  17:56)
Я про то что показывать что бы сделали инклуд... но почему бы его самим раньше не сделать ? smile я про этот бред... smile

Не совсем так. Далеко не всегда коду, использующему подобный заголовок, могут понадобиться интерфейсы предопределенных в нем классов.
Типичный пример:
Код
class TiXmlElement;
class Object
{
public:
    Object(const TiXmlElement *node);
    int method1() const;
 ...
private:
 ...
};

std::vector<Object> ObjectArray;
Т.е. код, который использует ObjectArray не обязательно должен знать TiXmlElement, так как не он мог заполнять этот массив.
PM   Вверх
Djinn
Дата 21.8.2008, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 18.5.2007

Репутация: нет
Всего: 1



bsa, cпасибо, вроде понятно...  smile  smile 

Это сообщение отредактировал(а) Djinn - 21.8.2008, 21:48
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0548 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.