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

Зачем нужно опережающее объявление класса в заголовке? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 5.00
Buckstabue
 Аватар для Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
27.08.2012, 19:50     Зачем нужно опережающее объявление класса в заголовке? #1
Часто натыкаюсь на такой код:
C++
1
2
3
4
5
6
7
8
9
class NewType;
 
class Class1
{
public:
   Class1();
private:
   NewType *field;
};
а в определении класса
C++
1
2
3
4
5
6
#include "newtype.h"
 
Class1::Class1()
{
   field = NewType();
}
Прочитал в вики и на других форумах, что это якобы предотвращает цикличиские ссылки двух заголовочных файлов. Но не пойму, чем не угодила директива препроцессора
C++
1
2
3
4
#ifndef NEWTYPE_H
#define NEWTYPE_H
....
#endif
Кроме того в одном месте прочитал, что это ускоряет компиляцию и в то же время прочел, что это увеличивает расход памяти у компилятора и вообще может привести к замедлению компиляции. Кому верить?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
27.08.2012, 19:52     Зачем нужно опережающее объявление класса в заголовке? #2
Зачем нужно опережающее объявление класса в заголовке?
затем, что класс NewType еще не определен, а он уже используется в классе Class1
Buckstabue
 Аватар для Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
27.08.2012, 19:56  [ТС]     Зачем нужно опережающее объявление класса в заголовке? #3
Ну его ведь можно определить простейшим вызовом #include "newtype.h" , что с виду логичнее, плюс автодополнение в редакторе появляется
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
27.08.2012, 20:01     Зачем нужно опережающее объявление класса в заголовке? #4
Иногда так делают для полного сокрытия реализации класса NewType.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.08.2012, 20:18     Зачем нужно опережающее объявление класса в заголовке? #5
Предопределение класса
StasGamilton
Эксперт по пяченькам
 Аватар для StasGamilton
67 / 67 / 1
Регистрация: 16.08.2011
Сообщений: 258
27.08.2012, 20:21     Зачем нужно опережающее объявление класса в заголовке? #6
Цитата Сообщение от Toshkarik Посмотреть сообщение
Иногда так делают для полного сокрытия реализации класса NewType.
А иногда это единственный способ, чтобы программа нормально заработала

Добавлено через 1 минуту
Цитата Сообщение от Buckstabue Посмотреть сообщение
Ну его ведь можно определить простейшим вызовом #include "newtype.h"
Ну у меня был случай когда файл A.h ссылался на B.h и наоборот - в результате не компилировалось - выход был только один - предопределение класса.
Yandex
Объявления
27.08.2012, 20:21     Зачем нужно опережающее объявление класса в заголовке?
Ответ Создать тему
Опции темы

Текущее время: 01:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru