![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| alien_by |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 29.11.2004 Где: Belarus/Gomel Репутация: нет Всего: 8 |
Это разделение пошло ещё с C, там в заголовочных файлах описывалис прототипы функций, а их реализации обычно скрывались (путём создания библиотек обьектных файлов), тоже самое делается и сейчас.
Суть же самого разделения на декларацию и имплементацию состоит в том, что декларация (т.е. описание классов) меняется довольно редко, а вот реализация в процессе разработки изменяется часто. Такое разделение даёт несколько очевидных преимуществ. 1. Скрытие реализации (не скажу, что для всех преимущество 2. Возможность т.н. прекомпиляции (или раздельной компиляции). 3. Стандартизация интерфейсов. поясню. С первым понятно... Второе, есть код, который используется повторно в нескольких участках программы, например
и есть несколько участков в которых он используется
Все эти три класса расположены в отдельных файлах и при компиляции образуется три байткодовых файла (Code.obj, Section1.obj, Section2.obj) А теперь представим что код в классе Code постоянно изменяется (А интерфейс не изменяется). Однако, поскольку Section1 и Section2 ссылаются лишь на прототип класс и поэтому вне зависимости от того, как будет изменён класс Code, эти два класса перекомпилироваться не будут. Обратная ситуация в случае с реализацией, непосредственно в заголовках. Как известно C++ компилятор (в отличии от компилятора Java) при компиляции некоторого кода руководствуется только набором директив include, всё что будет таким образом найдено, используется при компиляции. Поэтому при описании реализации в заголовочных файлах, для каждого из частков кода (читай файла), который использует эти методы будет создаваться своя копия кода данных методов.(во закрутил Однако есть исключения: inline подстановки, которые и должны каждый раз включаться в том месте где используются (именно поэтому они обязательно должны быть определены в заголовочных файлах). Шаблонные классы, тоже обязательно должны быть определены в заголовках, т.к. для них всё равно в каждом отдельном случае необходима компиляция. И третье.. связано с первым и вторым. Для некоторых реализации возможно сгенерировать интерфейсы доступа по байткоду, обычно эти интерфейсы получаются в виде заголовочных файлов. |
||||
|
|||||
| Hroft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 20.10.2003 Где: Москва Репутация: нет Всего: 3 |
Может, лучше бы тогда было? azesmcar все правильно написал. Кстати, interface и implementation появились в паскале в связи с появлением модулей, а не с поддержкой ООП. Разделение программы на заголовки (интерфейсы) и реализацию - та же самая инкапсуляция (один из ее видов). Header'ы - это public, cpp - private. Кстати, если уж на то пошло, то модуль - это просто синглтон. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
сомневаюсь. писать, все-таки, правильно нужно. -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Hroft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 20.10.2003 Где: Москва Репутация: нет Всего: 3 |
А что у него неправильно
|
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
пунктуация
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 1 Всего: 23 |
Да и про тещу горестно было читать.
А вообще пошёл флейм. |
|||
|
||||
| Hroft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 20.10.2003 Где: Москва Репутация: нет Всего: 3 |
Да уж, действительно хватит.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |