Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 310
1

Сравнение файлов C++ .cpp и .h по средствам представления .cs файлов в C#

20.02.2018, 20:27. Просмотров 1679. Ответов 11
Метки нет (Все метки)

Доброго времени суток. Я немало времени потратил на C#. Сейчас изучаю литературу по С++ и не могу понять не из одной из публикаций как проворачивать такие же вещи с подключением файлов и работа между ними(в том числе их содержимым - классами) как в C# по тем же принципам из С++.

В шарпе все просто: есть файлы, в них классы
Например есть следующая иерархия(с головы):
Кликните здесь для просмотра всего текста
Код
- Program.cs
- Main.cs
- Test.cs
- net/Net.cs
- net/Work.cs
- net/subnet/Updater.cs

Код
Вызываем методы Program он вызывает(>) Test > net/Work > net/subnet/Updater > net/Net, и все это возвращается обратно в Program по итогу.
Есть .h - это, как я понял просто библиотеки, файлы с кодом, вставляемые в определенный кусок cpp файла при компиляции. Могу ли я реализовывать так же просто подобные иерархии обработки кода в C++?

Спасибо!
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2018, 20:27
Ответы с готовыми решениями:

Подключение файлов main.cpp some.cpp some.h
Всем привет, программа разделенна на три файла poly.cpp main.cpp poly.h Кто мог бы объяснить как...

Сравнение файлов в папке и создание папок с именами файлов
Нужно пройтись по папке, если есть картинка с названием, но нет папки с таким же названием, создать...

Создание cpp файлов
я недавно начал зучать язык программированя С++ и делаю это самостоятельно с помашю книг и...

Обращение файлов cpp
Всем привет! Изображу наглядно код: main.cpp #include <iostream> using namespace std; void...

Преобразование файлов *.so обратно в *.cpp
даны исходные данные: 1) имеется make - утилита, автоматизирующая процесс преобразования файлов...

11
nmcf
6533 / 5757 / 2621
Регистрация: 14.04.2014
Сообщений: 24,494
20.02.2018, 21:04 2
Как так же? Без h, что ли? Подробнее.
2
Renji
2513 / 1719 / 515
Регистрация: 05.06.2014
Сообщений: 4,981
20.02.2018, 21:29 3
Цитата Сообщение от slenderface Посмотреть сообщение
В шарпе все просто: есть файлы, в них классы
Вам и в плюсовый .h никто не запрещает классы класть. А потом дергать методы одного класса из другого класса.
Цитата Сообщение от slenderface Посмотреть сообщение
Есть .h - это, как я понял просто библиотеки, файлы с кодом, вставляемые в определенный кусок cpp файла при компиляции.
Ну да, файлы с кодом описывающим класс. А что вы там еще ожидали увидеть?
2
slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 310
20.02.2018, 21:33  [ТС] 4
Renji, вот я принцип и не понимаю. Я привык, что есть у меня конкретный файл в котором все уже описано. Как мне дергать тогда другие сpp файлики? У себя в шарпе я пишу using Net.cs и поехали! А тут что делать?
0
20.02.2018, 21:33
Renji
2513 / 1719 / 515
Регистрация: 05.06.2014
Сообщений: 4,981
20.02.2018, 21:40 5
Цитата Сообщение от slenderface Посмотреть сообщение
У себя в шарпе я пишу using Net.cs и поехали! А тут что делать?
#include<net.h> и поехали.
Цитата Сообщение от slenderface Посмотреть сообщение
Как мне дергать тогда другие сpp файлики?
А в cpp вам вообще лезть не нужно. В случае библиотек, он служит для так сказать генерации кеша компиляции ("вот у меня здоровый код, ты его один раз скомпилируй, сложи результат в файлик и потом бери код из файлика, а не пересчитывай"). Что конкретно в этом файле лежит, пользователя библиотеки беспокоить не должно. И вообще, есть хедер-онли библиотеки, где такого кеша нет.
2
slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 310
20.02.2018, 22:13  [ТС] 6
Цитата Сообщение от Renji Посмотреть сообщение
А в cpp вам вообще лезть не нужно. В случае библиотек, он служит для так сказать генерации кеша компиляции ("вот у меня здоровый код, ты его один раз скомпилируй, сложи результат в файлик и потом бери код из файлика, а не пересчитывай"). Что конкретно в этом файле лежит, пользователя библиотеки беспокоить не должно. И вообще, есть хедер-онли библиотеки, где такого кеша нет.
стыдно, но я вас не понимаю... как тогда мнеиз .h дергать другие файлы с классами? Это я к тому, что в шарпе у меня, как я уже описал, есть некая иерархия, где классы используют друг друга, а затем в обратном порядке возвращаются туда же, откуда и начинали, по принципу стека.
0
Renji
2513 / 1719 / 515
Регистрация: 05.06.2014
Сообщений: 4,981
20.02.2018, 22:25 7
Цитата Сообщение от slenderface Посмотреть сообщение
стыдно, но я вас не понимаю... как тогда мнеиз .h дергать другие файлы с классами?
C++
1
2
3
4
5
6
7
8
9
10
11
#include<FirstClass.h>
class SecondClass
{
public:
    //дергаем метод другого класса
    void someMethod(){object.doSomething();}
    //А можно спрятать тело метода в cpp. Для обращения к методу, иклудить cpp не нужно
    void otherMethod();
private:
    FirstClass object;
};
Ну вот, в случае otherMethod вам потребуется показать компилятору либо где лежит cpp, либо где лежит файл в который вы этот cpp скомпилировали. Зато, вы получите более быструю компиляцию программы. А можно делать хедер-онли библиотеку и не забивать себе голову вопросами "как подсунуть компилятору нужный файл".
1
slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 310
20.02.2018, 22:33  [ТС] 8
Renji, т.е. по сути я могу иметь единственный .cpp и сотню тысяч .h, которые как и шарп вызывают друг друга?
0
Renji
2513 / 1719 / 515
Регистрация: 05.06.2014
Сообщений: 4,981
20.02.2018, 22:44 9
Лучший ответ Сообщение было отмечено slenderface как решение

Решение

Цитата Сообщение от slenderface Посмотреть сообщение
Renji, т.е. по сути я могу иметь единственный .cpp и сотню тысяч .h, которые как и шарп вызывают друг друга?
Да, в своих библиотеках вы спокойно можете обходиться вообще без .cpp. Другой вопрос, что не все разработчики сторонних библиотек поступают также. Но тут уж вопросы к этим разработчикам.
1
Байт
Эксперт C
21305 / 13469 / 2839
Регистрация: 24.12.2010
Сообщений: 28,572
20.02.2018, 22:59 10
slenderface, Вы, видимо, чего-то ждете от H-файлов. А в них ну совершенно никакой мистики. #include "xxxx.h" просто вставляет текст из файла xxxx.h в ваш cpp-файл и больше ровным счетом ничего. И вы вполне можете обходиться одними cpp без всяких хедеров.
Но. Используемые вами классы и методы должны быть описаны перед употреблением. Можете их описать в начале вашего cpp.
А теперь представьте, что у вас в проекте 2 срр-исходника. И оба они используют одни и те же классы и методы (функции). Конечно, можно скопипастить все описания из одного исходника в другой. Но по ходу разработки вы меняете классы, методы, функции ... И вам придется эти описания менять в обоих файлах. И не дай Бог, вы ошибетесь, и описания получатся разными! А если файлов не 2, а 5?
Вот чтобы спасти нас, бедолаг, от этих напастей и были придуманы хедеры. Вы ОДИН раз описываете общее, в этом хедере. А потом просто подключаете в нужные места #include
Ежели подключите лишнее - совершенно нет беды. В коде эти описания не занимают места. Они нужны только ТРАНСЛЯТОРУ, чтобы он знал, с чем имеет дело.
ЗЫ. Все вышеизложенное не совсем верно для некоторых фреймворков типа Qt, но если вы поймете, что все на самом деле ОЧЕНЬ ПРОСТО, вы и с этими механизмами разберетесь запросто.
На форуме есть блог уважаемого Evg, где все очень внятно и толково про эти хедеры написано.

Добавлено через 4 минуты
http://www.cyberforum.ru/blogs/18334/blog100.html
1
slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 310
21.02.2018, 09:04  [ТС] 11
Цитата Сообщение от Байт Посмотреть сообщение
А теперь представьте, что у вас в проекте 2 срр-исходника. И оба они используют одни и те же классы и методы (функции). Конечно, можно скопипастить все описания из одного исходника в другой. Но по ходу разработки вы меняете классы, методы, функции ... И вам придется эти описания менять в обоих файлах. И не дай Бог, вы ошибетесь, и описания получатся разными! А если файлов не 2, а 5?
большое спасибо за подробное разъяснение, но вот этого смысл до меня и не доходит. я на c# никогда ничего не описывал один или несколько раз. Нужно скопировать код и его свойства - наследуем класс. А так просто подключаешь файлики к друг другу через using - работает.
0
Байт
Эксперт C
21305 / 13469 / 2839
Регистрация: 24.12.2010
Сообщений: 28,572
21.02.2018, 09:25 12
Лучший ответ Сообщение было отмечено slenderface как решение

Решение

Цитата Сообщение от slenderface Посмотреть сообщение
но вот этого смысл до меня и не доходит. я на c# никогда
Разные языки - разные парадигмы. Несмотря на похожие названия. Но в этой похожести ни Си, ни Си++ не виноваты.
Мне механизм Си-Си++ больше по душе. Возможно, потому что я начинал именно с них. И кажется более универсальным, абстрактным. И это не за счет усложнения, а скорее наоборот. Этот же прекомпилятор вы можете использовать где угодно. Он обрабатывает тексты - и только. Шарповский же using уже что-то знает о языке.
Но переход на другой развитый язык, да, требует некоторых усилий. Я бы тоже, наверное, если пришлось бы работать с Шарпом, испытывал бы стресс и головную боль.
0
21.02.2018, 09:25
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2018, 09:25

Условное подключение cpp файлов
Здравствуйте,я вот захотел сделать в своей программе выбор языка,но увеличивать программу на кучу...

Архитектура размещения h и cpp файлов
Доброго времени суток! Есть библа, содержащая ряд функций. Допустим, func1, func2 и ещё over 10....

Компиляция .cpp-файлов из программы
Доброго времени суток! Имеется VS 2013 и .cpp файлы. Задача - написать свою программу, которая...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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