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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 5.00
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
#1

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

27.08.2012, 19:50. Просмотров 1903. Ответов 5
Метки нет (Все метки)

Часто натыкаюсь на такой код:
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
Кроме того в одном месте прочитал, что это ускоряет компиляцию и в то же время прочел, что это увеличивает расход памяти у компилятора и вообще может привести к замедлению компиляции. Кому верить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2012, 19:50     Зачем нужно опережающее объявление класса в заголовке?
Посмотрите здесь:

C++ Создать объявление класса и разработать программу-драйвер, которая продемонстрирует работу класса.
C++ Объявление класса с шаблоном
Объявление объекта одного класса в описании другого класса C++
Объявление дружественного класса внутри класса C++
Объявление шаблонного класса C++
C++ Объявление класса Patient
зачем в с++ писать в объявление функции const ? C++
C++ Предварительное объявление класса
Объявление класса Point C++
C++ Объявление объекта класса
C++ Объявление объектов класса
C++ Зачем нужно использовать инициализаторы элемент-данных класса?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
27.08.2012, 19:52     Зачем нужно опережающее объявление класса в заголовке? #2
Зачем нужно опережающее объявление класса в заголовке?
затем, что класс NewType еще не определен, а он уже используется в классе Class1
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
27.08.2012, 19:56  [ТС]     Зачем нужно опережающее объявление класса в заголовке? #3
Ну его ведь можно определить простейшим вызовом #include "newtype.h" , что с виду логичнее, плюс автодополнение в редакторе появляется
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
27.08.2012, 20:01     Зачем нужно опережающее объявление класса в заголовке? #4
Иногда так делают для полного сокрытия реализации класса NewType.
Jupiter
Каратель
Эксперт С++
6550 / 3970 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.08.2012, 20:18     Зачем нужно опережающее объявление класса в заголовке? #5
Предопределение класса
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     Зачем нужно опережающее объявление класса в заголовке?
Ответ Создать тему
Опции темы

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