2011-08-04 1 views

답변

0

아니요. C#의 partial 키워드를 사용하면 클래스에 새 메서드와 멤버를 추가 할 수 있습니다. C++에서 클래스가 헤더에 정의되면 클래스를 변경하기 위해 헤더를 변경해야합니다. 다른 헤더에 새 메소드/멤버를 선언 할 수는 없습니다.

C 번호 :

class A{ 
    public void f(){} 
} 

//other file: 
partial class A{ 
    public void g(){} 
} 

자 클래스 A가 F 및 g 기능을 모두 갖는다. C++에서 당신은 정의하지만, 일단 :

class A{ 
    public: 
     void f(); 
} 

f는 A의 유일한 방법이 될 것이다 당신은 새로운 헤더 파일에 새로운 메소드를 선언하거나 CPP 파일에 클래스 정의에없는 방법을 정의 할 수 없습니다 .

+0

오케이. 거기에있다. 클래스를 여러 어셈블리에 둘 수 있습니까? – sarat

+0

C++의 어셈블리에 대한 지식이 없습니다. 그러나 원하는 cpp 파일에 멤버 함수를 구현할 수는 있지만 아무런 제한이 없습니다. –

+2

@sarat : 클래스 (유형)가 1 어셈블리에 완전히 정의되어 있지 않아야합니다. 나는 이것이 C++/CLI를 위해서도 있다고 생각한다. 그것은 CLI이다. –

4

예와 부분에 대한 제

주된 이유는 다른 당사자가 (당신과 1+ 도구/디자이너) 각 작업 할 클래스의 자신의 부분을 가질 수 있다는 것입니다. C++에서는 실제 클래스 정의를 복수 .h 파일로 분할해야합니다.

결국 모든 코드는 컴파일러 (링커)에 의해 모든 규칙과 일치해야하는 1 개의 클래스 정의로 병합됩니다.

+0

나는 포인터 타입 ('FILE *'과 같은)을 선언하고 캡쳐를 더 잘하기 때문에 헤더에있는 public 함수만을 선언하는 C 방식을 좋아하지만 힙 할당 객체 만 사용할 수있다. – sashoalm

0

C#의 일부 키워드는 Visual Studio (사용자 인터페이스 구성 요소)에서 자동 생성 한 데이터를 코드에서 분리하는 데에만 사용해야합니다. 당신이 큰 수업을 나누기 위해 그것을 사용하고 싶은 유혹을받는다면, 아마 당신은 그것을 더 작은 소수의 수업으로 나누는 것을 고려해야 만 할 것입니다.

0

다른 답변에서 언급되지 않은 이유 중 하나가 같은 이유가 있습니다. CLR은 JVM처럼 클래스와 함께 작동하므로 클래스의 개념은 컴파일 된 코드에 보관됩니다. 표준 C++은 대개 클래스의 개념이없는 객체 형식으로 컴파일됩니다. 이러한 이유 때문에 C++ 컴파일러는 함수 이름을 변경하여 결과 라이브러리 또는 실행 파일을 함께 묶는 링커에 고유 한 것을 보장해야합니다. 이 프로세스를 "mangling"이라고합니다.

관련 문제