Пакеты Java против библиотек C ++

В Java есть то, что называется package. Означает ли library в C++ то же значение, особенно в терминах, например, в терминах содержания относительных классов и использования защищенных членов?

Спасибо.


person Simplicity    schedule 25.01.2011    source источник
comment
К сожалению, я не знаю, как работают библиотеки C #, но защищенный член действительно виден изнутри пакета, и каждый пакет определяет отдельное пространство имен для имен классов, если это то, что вы имели в виду.   -  person biziclop    schedule 25.01.2011
comment
@biziclop. На самом деле я спрашиваю о C ++, а не о C #.   -  person Simplicity    schedule 25.01.2011
comment
@ user588855 Оказывается, я даже читать не умею. :)   -  person biziclop    schedule 25.01.2011


Ответы (6)


Есть разные измерения того, что означает package в Java. В качестве контейнера, который отличает имена классов внутри от имен классов в других пакетах, его эквивалентом будет c ++ namespaces.

Как модуль, который гарантирует доступ к классам в том же блоке не являющимся частными членами, в C ++ нет эквивалента. Уровень доступа, предоставляемый классу, не зависит от пространства имен, в котором класс определен.

В качестве способа упорядочивания ваших источников на диске нет эквивалента, язык C ++ не имеет требований к тому, как код хранится в файлах.

Что касается библиотек C ++, это ближе к jar файлам в Java. Они объединяют разные классы, которые имеют некоторое отношение. Jar может содержать более одного пакета, и более одного jar могут содержать классы из одного и того же пакета. Точно так же с библиотеками они могут содержать классы из разных пространств имен и / или разные библиотеки могут содержать классы из одного и того же пространства имен.

person David Rodríguez - dribeas    schedule 25.01.2011

Наиболее близкими к пакетам Java являются пространства имен в C ++.

Они могут быть вложены друг в друга, и вам нужно специально заявить, что вы using они или часть их содержимого. Однако они не навязывают никакой физической иерархии файлов, как это делают пакеты Java.

person Péter Török    schedule 25.01.2011

Строго говоря, я думаю, что пространства имен в C ++ обеспечивают ту же семантику.

person Mihai Toader    schedule 25.01.2011

Думаю, это больше связано с пространствами имен в C ++. И Java, и C ++ используют библиотеки. Библиотека может быть любым независимым набором классов [возможно, фреймворком], к которому можно получить доступ в нашем коде.

person aNish    schedule 25.01.2011

Внешние библиотеки есть как в Java, так и в C ++. Различаются только форматы: .jar в Java и .dll / .so в C ++.

Назначение пакетов и пространств имен отличается от библиотек. Они избегают исчерпания имен, позволяя пользователю логически сгруппировать источник.

person Sulla    schedule 25.01.2011

package в Java - это пространство имен для классов, интерфейсов и перечислений. Имя пакета, точка и имя класса образуют полное имя класса класса:

com.example.hello.HelloWorldApplication
^--packagename--^ ^-----classname-----^

Точки в имени пакета имеют другое значение, чем точка между именами: первые две точки в этом примере являются частью имени пакета, последняя является разделителем.

Это следует иметь в виду, потому что существует распространенное заблуждение относительно имен пакетов: некоторые люди думают, что имена пакетов могут быть сопоставлены с иерархической структурой папок, а имена пакетов тоже имеют иерархию - что не так: hello не является "подпакет" из example!

Но для создания простого сопоставления с папками и файлами загрузчик классов может просто взять полное имя класса, заменить все точки косой чертой и добавить .class, чтобы получить относительный путь к файлу класса.

Но обратите внимание, что сопоставление папок / файлов не требуется для загрузки классов - мы можем изобрести загрузчик классов, который получает классы из базы данных или удаленной службы - сопоставление папок / файлов в этом случае не имело бы никакого смысла.

person Andreas Dolk    schedule 25.01.2011