2011-01-25 4 views
6

Java에는 package이 있습니다. C++에있는 library은 특히 상대 클래스를 포함하는 예와 보호 된 구성원의 사용과 같은 의미를 나타냅니다.Java 패키지와 C++ 라이브러리

감사합니다.

+0

불행히도 나는 C# 라이브러리의 작동 방식을 모르지만 보호 된 멤버는 패키지 내에서 실제로 볼 수 있으며 각 패키지는 클래스 이름에 대해 별도의 네임 스페이스를 정의합니다. – biziclop

+0

@biziclop. C++이 아닌 C++에 대해 실제로 묻습니다. – Simplicity

+0

@ user588855 내가 읽을 수 없다는 것이 밝혀졌습니다. :) – biziclop

답변

10

Java에서 package의 의미와 다른 크기가 있습니다. 클래스의 이름을 다른 패키지의 클래스 이름과 차별화하는 컨테이너로, 동등한 값은 C++ namespaces입니다.

동일한 블록의 클래스에 비공개 멤버에 대한 액세스를 보장하는 유닛으로 C++에는 동일한 기능이 없습니다. 클래스에 부여 된 액세스 수준은 클래스가 정의 된 네임 스페이스와 관계가 없습니다.

디스크에서 소스를 정렬하는 방법으로는 해당하는 것이 없으므로 C++ 언어는 코드가 파일에 저장되는 방법에 대한 요구 사항이 없습니다.

C++ 라이브러리의 경우 Java에서 파일이 jar에 가깝습니다. 그들은 어떤 관계를 공유하는 다른 클래스들을 묶는다. jar에는 둘 이상의 패키지가 포함될 수 있고 둘 이상의 jar에는 동일한 패키지의 클래스가 포함될 수 있습니다. 라이브러리와 마찬가지로 여러 네임 스페이스의 클래스를 포함 할 수 있고 다른 라이브러리는 동일한 네임 스페이스의 클래스를 포함 할 수 있습니다.

2

엄밀히 말하면 C++의 네임 스페이스는 동일한 의미를 제공한다고 생각합니다.

7

Java 패키지와 가장 가까운 것은 C++에서 namespaces입니다.

그들은 서로 중첩 될 수 있으며, 구체적으로 자신이 using이거나 그 내용의 일부임을 선언해야합니다. 그러나 Java 패키지처럼 실제 파일 계층 구조를 적용하지 않습니다.

1

나는 C++의 네임 스페이스와 더 관련이 있다고 생각한다. Java 및 C++ 모두 라이브러리를 사용합니다. 라이브러리는 코드에서 액세스 할 수있는 임의의 독립 클래스 집합 [아마 프레임 워크] 일 수 있습니다.

0

외부 라이브러리에는 Java와 C++가 있습니다. 형식은 Java에서 .jar, C++에서 .dll/.so와 다양합니다.

패키지 및 네임 스페이스의 목적은 라이브러리와 다릅니다. 사용자가 논리적으로 소스를 그룹화 할 수 있도록하여 이름이 부족한 것을 방지합니다.

0

자바에서 package은 클래스, 인터페이스 및 열거 형의 네임 스페이스입니다. 이 예제의 처음 두 점 :

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

패키지 이름에있는 점은 다음 다른 의미 이름의 점을 가지고 : 패키지 이름은 점과 클래스 이름은 클래스의 완전한 클래스 명을 형성 패키지 이름이 인 부분이며 마지막 부분은 구분 기호입니다.

패키지 이름과 관련하여 일반적인 오해가 있기 때문에 명심해야합니다. 계층 적 폴더 구조에 이름을 매핑 할 수 있기 때문에 패키지 이름에 계층 구조가있는 것 같습니다. helloexample의 "서브 패키지"가 아닙니다!

그러나이 폴더 및 파일에 대한 간단한 매핑을 만들려면 클래스 로더는 단순히 완전한 클래스 이름을 슬래시로 모든 점을 교체하고 클래스 파일의 상대 경로를 얻을 수 .class을 추가 할 수 있습니다.

폴더/파일 매핑이 필요 없다는 점에 유의하십시오.로드 클래스 - 데이터베이스 또는 원격 서비스에서 클래스를 가져 오는 클래스 로더를 생성 할 수 있습니다. 폴더/파일 매핑은 의미가 없습니다. 그 사건.