|
|
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
Здрасте всем, т.к. я здесь ещё не постился. Если я пишу класс в С++, то описания находятся в заголовочном файле а сами ф-ии класса в файле *.cpp Зачем и почему и можно ли это в С++ делать иначе? Ниже 2 примера, первый на С++, второй на C#: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. А вот так выглядит это на C# Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. Я сделал всё что мог, кто может пусть сделает лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 11:55 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
Как зачем? Это способ хранения метаданных (т.е. данных, описывающих классы, модули...). Примерно для того-жу, что и библиотеки типов в VB или метаданные в .NET. Только разница между ними в 20 лет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 12:16 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
ОК. Но я же привёл пример на шарпе, никаких метаданных я лично там не писал. Где они? Где я их могу увидеть? Я сделал всё что мог, кто может пусть сделает лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 12:20 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
system.reflection ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 13:18 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
system.reflection Ну и пусть себе там лежат, главное, что я их сам в данном случае писать не должен :) Я просто думал, может за этими заголовочными файлами смысл какой глубокий лежит, может преимущества у такого подхода есть какие-нить... А что выходит? Куча ненужной работы.... Я сделал всё что мог, кто может пусть сделает лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 13:27 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
M234 В .Net метаданные о типах храняться вместе с кодом в сборке reflection позволяет получить к ним доступ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 13:40 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
reflection позволяет получить к ним доступ ОК. Мой примерчик выше видели? Вот к нему пожалста пример исп-ия reflection напишите. У меня не получается чего-то.... Пишу system.reflection выпадает ааааафигенный список всякой всячины и что дальше? Как мне метаданные моего класса получить? Я сделал всё что мог, кто может пусть сделает лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 13:49 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
1. Смысл в выделении заголовочных файлов, по-моему, в отделении описания от реализации. Например, захотел ты ввести новую переменную - тебе не надо искать куда бы ее воткнуть в уже готовой программе на С#... 2. Пример приведен не совсем корректный. На одном классе С# выглядит красиво. А во что превратится программа на С# при описании 5 - 10 классов? 3. Кроме того, если не заметили, функции от разных классов в срр-файле идут в произвольном порядке, а в C# положены внутрь скобок. В С++ новая функция добавляется в любое место файла (в начало, в середину или конец - как удобно разработчику), а попробуйте-ка добавить при тех же условиях новую функцию к классу в С# и сразу все станет ясно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 14:11 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
А во что превратится программа на С# при описании 5 - 10 классов? Получите 5 - 10 .cs-файлов по одному на класс и ничего страшного не произойдёт... Кроме того, если не заметили, функции от разных классов в срр-файле идут в произвольном порядке, а в C# положены внутрь скобок. Не понял, какие скобки? В С++ новая функция добавляется в любое место файла (в начало, в середину или конец - как удобно разработчику), а попробуйте-ка добавить при тех же условиях новую функцию к классу в С# и сразу все станет ясно... Если мои классы находятся в одном пространстве имён, то никакой порядок мне не нужно соблюдать... опять же не понятно о чём это вы.... конкретнее пожалуйста..... а классу ф-ию добавить могу влюбом месте, почему нет? что у меня по вашему мнению не должно получится? примерчик того что не получится можно? Я сделал всё что мог, кто может пусть сделает лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 14:33 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
>Не понял, какие скобки? Операторные, т.е. { и } >Если мои классы находятся в одном пространстве имён, то никакой порядок мне не нужно соблюдать... а классу ф-ию добавить могу влюбом месте, почему нет? попробуйте написать в C# что-то подобное (именно в таком порядке): класс1::функция1 {текст функции} класс2::функция1 {текст функции} класс3::функция2 {текст функции} класс1::функция3 {текст функции} класс4::функция1 {текст функции} класс2::функция1 {текст функции} // перегрузка функции класс4::функция1 {текст функции} // перегрузка функции и т.д. В дополнение к сказанному могу отметить, что часто реализация классов включается в С++ библиотеки, а описания дают возможность программисту понять (или вспомнить) как реализованы классы, какие функции, с какими аргументами должны вызываться... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 16:09 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
Попробуй в одном cs-файле написать 2 класса (Class1 и Class2) в каждом по два метода (Method1 и Method2). Но при одном условии! Реализация методов в данном классе должна идти в следующем порядке: 1) Class1.Method1 2) Class2.Method1 3) CLass1.Method2 4) CLass2.Method2 Потом посмотри, что тебе компилятор скажет. P.S. 1 класс = 1 cs-файл. Это не данность, это всего лишь рекомендация MS по оформлению кода. В один файл можно запихнуть сколько угодно классов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 16:11 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
В дополнение к сказанному могу отметить, что часто реализация классов включается в С++ библиотеки, а описания дают возможность программисту понять (или вспомнить) как реализованы классы, какие функции, с какими аргументами должны вызываться... В ВизуалСтудио после того как я написал имя ф-ии и отрыл скобку, что бы параметры указать, я вижу сразу подсказку в которой есть всё что надо и описание ф-ии и каждого параметра.... Потом посмотри, что тебе компилятор скажет. Компилятор совершенно резонно замечает, что этот класс уже был определён, т.е. писать новую ф-ию нужно внутри скобок Class1 { функции }. Я же могу только усомнится в полезности "размазывания" класса в произвольном порядке в файле где к тому же уже "размазаны" так несколько других классов. Целостность картины пропадает, а каких-то преимуществ не видно. Я сделал всё что мог, кто может пусть сделает лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 16:32 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
Копай глубже - возьми какую-нибудь книгу по обычному C и прочти - зачем там нужны .c и .h файлы - а рассказывать с нуля - долгое и неинтересное занятие... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 16:33 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
В файле .h описывается интефейс. В файле .cpp его реализация. Это позволяет разрабатывать интерфейсы и их реализации отдельно. Несомненно, что понять, какие методы класса нужны, проще, если не думать об их реализации. С другой же стороны, если известно, что именно должна делать функция, то разработать её реализацию проще. В итоге, сам процесс разработки существенно упрощается за счёт декомпозиции одной сложной задачи на две простых - разработки собственно интерфейса и собственно реализации. Кроме того, при компиляции модулей в объектные файлы можно использовать ещё не реализованные интерфейсы - проверка на завершённость программы будет осуществляться только на этапе связывания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 16:44 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
Копай глубже - возьми какую-нибудь книгу по обычному C и прочти - зачем там нужны .c и .h файлы - а рассказывать с нуля - долгое и неинтересное занятие... Зачем? Чтобы узнать, что в тысячадевятсотмохнатом году, "когда компьтеры были большими" было что-то, что требовало наличее этих файлов.... Если бы это несло в себе какое-то рациональное зерно, то такие файлы были бы везде и в паскале и в бэйсике и в шарпе...., но нет зерна, просто рудимент из далёкого прошлого.... Я сделал всё что мог, кто может пусть сделает лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 16:46 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
Вы чего, M234, с Луны свалились? Как это зерна нет? А в Паскале точно так же есть интерфейс модуля и есть его реализация. Они разбиты на две независимые части. И в PL/SQL. А если этого и нет в C# - то это сделано только для того, чтобы сделать C# более совместимым с явой. Тут уж, извините, не об удобстве разработки думали. А вот потому, что в яве, C# и прочих языках нет заголовочных файлов - без UML в них кто угодно ногу сломит. То есть, С++ - более-менее самодостаточный язык. А вот для C# требейтся UML или ещё что-нибудь в этом роде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 17:17 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
В большинстве современных языков программирования в том либо ином виде существует понятие "модуль" - оно в частности обычно состоит из 2х частей - интерфейсной и содержащей непосредственно код в Pascal - это interface и implementation части одного pas. файла, в C/C++ это пара файлов с расширениями .h(interface) и .cpp(implementation). В C#, вслед за Java с их идеологией write once run anywhere, эти части соединены - таким образом создатели пытались сосредоточить все, что нужно в одном месте. P.S> на мой взгляд - самая удобная реализация модуля в Pascal - т.е. один файл, но состоящий из двух частей. P.P.S>я не стал вдаваться в тему - зачем вообще нужна interface-ная часть - по прежнему отсылаю к соответствующей литературе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 17:28 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
Интерфейсы и в шарпе конечно есть, только не в таком принудительном порядке и явлют собой очень гибкие штуки, которые можно применять, а можно и без них обойтись: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. Для любознательных: http://msk.nestor.minsk.by/kg/2004/09/kg40903.html Я сделал всё что мог, кто может пусть сделает лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 17:29 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
M234 К стати - называть C++ рудиментом - по крайней мере не серьезно (тем более сравнивая его с бейсиком) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 17:29 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
M234 Интерфейсы и в шарпе конечно есть Элементарная каша из понятий - интерфейс модуля - это та его часть, которая видна другим модулям ИС интерфейс в смысле класс без атрибутов (то что называется interface в C# и JAVA) - это соглашение о полиморфизме Т.е. общего в этих понятих только синтаксис... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 17:31 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
К стати - называть C++ рудиментом - по крайней мере не серьезно (тем более сравнивая его с бейсиком) С++ рудиментом я не называл, но некоторые вещи и в нём любимом не очень хорошо продуманы. Взять к примеру строки. Паскалевы строки получше организованы... Я сделал всё что мог, кто может пусть сделает лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 17:34 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
M234 Бросьте - это String в Pascal лучше оганизован чем std::string? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 17:35 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
Заголовочные файлы остались от той поры, когда люди одевались в шкуры, дрались дубинами, а единственной документацией к программам служили исходники. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 00:58 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
а ты напиши так и будет короче чем в шарпе и быстрее в разы Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. и что бы могло так работать : Class1 <int> A; Class1 <float> B; A.setVariable( 5.2 ); B.setVariable( A.getVariable() ); и зачем этот убогий C# никак не пойму ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 01:28 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
funikovyuri Из одной статьи... "....Одно из преимуществ паскалевских строк состоит в том, что не надо каждый раз пробегать по строке в поисках её конца. Длина строки определяется одной ассемблерной инструкцией вместо целого цикла. Это намного быстрее. Старая операционная система Макинтошей использовала паскалевские строки повсюду. Многие программисты на C на других платформах использовали паскалевские строки для ускорения работы. Excel использует паскалевские строки внутри себя, поэтому строки во многих местах в Excel не могут быть длиннее 255 байт, и это одна из причин, почему Excel так быстро работает." Я сделал всё что мог, кто может пусть сделает лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 01:48 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
А кто мешает написать класс, в котором будет указатель на конец строки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 04:15 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
дайте мне шашкой помахать! Пример. Есть огромный проект. В одном файле держать всё не удобно(бегать искать замучишься, даже если есть поисковые системы умные...). Значит несколько файлов. Есть глобальная переменная. Попробуйте без заголовка передать её в из одного файла в другой. Ещё пример. Есть некий готовый отлаженный файл, скажем некого диалога частого пользования (например юзерский мессаджбокс(хотя бред полный, никому не советую делать свои мессаджбоксы! - нужно переделывать на ходу системные! Тогда не потеряете связь с будущими операционками)). С ахрененным кодом. Нафиг нам его за собой из проекта в проект таскать? Собираем один раз obj файл, и берём заголовок. Заголовок ложим в сорсы, объектник в дебаг и релиз и забываем про пересборку. Уже говорилось ранее. Для порядка. Захотел описание класс посмотреть, не надо бегать по всему срр (хедеры, как правило на порядок меньше) Ещё. Захотели вы ранее описанный класс(мессаджбокс) продать разработчикам, чтобы они радостно его использовали в своих программах... Без хедеров вам придётся продавать весь срр файл, и обязательно найдётся умник, который на вашем выстаданном коде легко сгенерит что-то более умное и заработает на вашем труде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 08:59 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
А мне можно ломом помахать :) А вы не слышали о возможности самодокументирования программ на C# при помощи XML? И не видели коммерческих dll БЕЗ исходных кодов но с этими самыми XML, в которых содержится описание всех интерфейсов. Поверьте - очень удобно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 10:11 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
Я слышал (и даже видел) самодокументированные, точнее самодокументирующие вещи на яве. Вполне явно, что СиДиез перенял эту особенность и надстроил над ней XML Тока я не понял, это камень в чей огород? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 13:08 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
... да это не камень, это буквально ломом по шашке! зы. в документировании NDoc рулит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 13:39 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
2 avg. Странная у Вас логика - сначала написать программу, а потом задокументировать. Не дешевле было бы наоборот? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 13:41 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
2CEMb Если на то пошло то не СиДиез а ДоДиез i_i (';') (V),(V),, JS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 13:48 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
M234 В вашей статье ключевое слово C - а говорим мы про C++. Если вы думаете что на C++ можно использовать только null-terminated строки - то это не так... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 14:05 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
авторСтранная у Вас логика - сначала написать программу, а потом задокументировать. Не дешевле было бы наоборот? Да нет ничего странного. Не сначала или после, а в процессе написания идет документирование. И никто не запрещает использовать uml и т.д. на начальных этапах проектирования. Не знаю кому как, лично мне C# очень понравился. А спецификации на версию 2 вообще впечатляют: http://www.uneta.org/Default.aspx?mnuid=4C75C55F-7BED-4BAE-83AE-AA79B5A51462 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 14:32 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
Неплохо типа шаблоны появятся ??? i_i (';') (V),(V),, JS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 14:34 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
2avg --А вы не слышали о возможности самодокументирования программ на C# при помощи XML? а обязательно такую мутоту в язык встраивать ? полно компанент и программ для этого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 18:51 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
JibSkeart, а я изначально # узнал как "диез", музыкант, блин! автора обязательно такую мутоту в язык встраивать ? Да она там места много не занимает... Вот, помнится, в яве так просто хитрые комментарии (вроде /** если не путаю), которые при проходе некой софтиной типа javadoc делают из этих комментариев документацию. авторНе сначала или после, а в процессе написания идет документирование. Это точно. Пожелалки, новые фичи, отвалившиеся фичи и баги... Всего в начале не предусмотришь. Сделал релиз - сделал доку. .. и идём мы на парад с красными шарами! .· ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2004, 10:06 |
|
||
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#18+
автора я изначально # узнал как "диез", музыкант, блин! Все верно, только в музыкальной нотации C# означает именно До диез, если я еще не забыл. автора обязательно такую мутоту в язык встраивать ? А кому оно мешает? Мне помогает, и очень сильно. авторВсего в начале не предусмотришь. Сделал релиз - сделал доку Это точно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2004, 10:27 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2035083]: |
0ms |
get settings: |
12ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
79ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
83ms |
get tp. blocked users: |
2ms |
| others: | 234ms |
| total: | 452ms |

| 0 / 0 |
