|
|
|
Зачем в С++ заголовочные файлы?
|
|||
|---|---|---|---|
|
#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 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32490420&tid=2035083]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
67ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 400ms |

| 0 / 0 |
