Пакеты Java против библиотек C ++ - PullRequest
6 голосов
/ 25 января 2011

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

Ответы [ 6 ]

10 голосов
/ 25 января 2011

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

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

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

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

8 голосов
/ 25 января 2011

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

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

3 голосов
/ 25 января 2011

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

1 голос
/ 25 января 2011

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

0 голосов
/ 25 января 2011

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

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

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

Об этом следует помнить, поскольку существует общее недопонимание относительно имен пакетов: просто потому, чтоНекоторые имена считают, что имена могут быть сопоставлены с иерархической структурой папок. Имена пакетов также имеют иерархию - это не так: hello не является «подпакетом» example!

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

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

0 голосов
/ 25 января 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...