C++에서는 클래스를 .h 파일로 선언 할 수 있으며 여러 파일에서 함수에 대한 정의를 가질 수 있습니다. 이 개념은 C#에서 클래스와 함께 부분 키워드를 사용하여 동일합니까?C# 및 C++의 부분 클래스가 다중 CPP 파일의 함수를 정의하고 있습니까?
답변
아니요. 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 파일에 클래스 정의에없는 방법을 정의 할 수 없습니다 .
예와 부분에 대한 제
주된 이유는 다른 당사자가 (당신과 1+ 도구/디자이너) 각 작업 할 클래스의 자신의 부분을 가질 수 있다는 것입니다. C++에서는 실제 클래스 정의를 복수 .h
파일로 분할해야합니다.
결국 모든 코드는 컴파일러 (링커)에 의해 모든 규칙과 일치해야하는 1 개의 클래스 정의로 병합됩니다.
나는 포인터 타입 ('FILE *'과 같은)을 선언하고 캡쳐를 더 잘하기 때문에 헤더에있는 public 함수만을 선언하는 C 방식을 좋아하지만 힙 할당 객체 만 사용할 수있다. – sashoalm
C#의 일부 키워드는 Visual Studio (사용자 인터페이스 구성 요소)에서 자동 생성 한 데이터를 코드에서 분리하는 데에만 사용해야합니다. 당신이 큰 수업을 나누기 위해 그것을 사용하고 싶은 유혹을받는다면, 아마 당신은 그것을 더 작은 소수의 수업으로 나누는 것을 고려해야 만 할 것입니다.
다른 답변에서 언급되지 않은 이유 중 하나가 같은 이유가 있습니다. CLR은 JVM처럼 클래스와 함께 작동하므로 클래스의 개념은 컴파일 된 코드에 보관됩니다. 표준 C++은 대개 클래스의 개념이없는 객체 형식으로 컴파일됩니다. 이러한 이유 때문에 C++ 컴파일러는 함수 이름을 변경하여 결과 라이브러리 또는 실행 파일을 함께 묶는 링커에 고유 한 것을 보장해야합니다. 이 프로세스를 "mangling"이라고합니다.
- 1. (C의 CPP 언어)
- 2. C의 버퍼 부분 복사
- 3. C++ .hpp 및 .cpp
- 4. 다른 .cpp 파일의 본문에서 .cpp 파일 컴파일
- 5. 하스켈의 CPP 확장 및 다중 라인 리터럴
- 6. cpp 파일의 함수 순서는
- 7. 수퍼 클래스가 이미 만들어진 objective-c의 다중 상속
- 8. cpp 상속 질문
- 9. CPP | .h 파일 (C++)
- 10. 레일 3에서 함수를 정의하고 호출하는 방법은 무엇입니까?
- 11. C의 다중 TCP 연결
- 12. FFI의 언어 CPP 및 방법 FFI
- 13. 템플릿 만있는 CPP 파일의 어셈블리를 얻는 방법
- 14. CPP 및 Qt에서 사운드 캡쳐
- 15. 다중 부분 식별자는
- 16. 추상 클래스가 아닌 부분 클래스를 사용하면 어떤 이점이 있습니까?
- 17. C# 및 C의 휘발성 차이
- 18. 객체 C의 MD5 및 C#
- 19. 다중 도움말 : 클래스가 아님
- 20. DynamicData 부분 클래스가 작동하지 않습니다.
- 21. SEL이 Objective-C의 클래스가 아닌 이유는 무엇입니까?
- 22. Doxygen 주석에 .cpp 파일의 하위 세트를 어떻게 포함시킬 수 있습니까?
- 23. .cpp 파일과 .h 파일의 차이점은 무엇입니까?
- 24. xaml에서 리소스를 정의하고 사용하여 C#
- 25. C# 프로젝트에서 cpp dll 사용
- 26. 포인터를 C의 인수로 취하는 C DLL 내에서 함수를 호출하는 방법 #
- 27. 부분 평가 함수를 테스트 기능 그대로 사용
- 28. C# 부분 클래스 및 COM 인터페이스
- 29. 스칼라 "연속"은 콜백 함수를 정의하고 사용하기위한 펑키 구문인가요?
- 30. iPhone에서 오디오 파일의 재생 부분
오케이. 거기에있다. 클래스를 여러 어셈블리에 둘 수 있습니까? – sarat
C++의 어셈블리에 대한 지식이 없습니다. 그러나 원하는 cpp 파일에 멤버 함수를 구현할 수는 있지만 아무런 제한이 없습니다. –
@sarat : 클래스 (유형)가 1 어셈블리에 완전히 정의되어 있지 않아야합니다. 나는 이것이 C++/CLI를 위해서도 있다고 생각한다. 그것은 CLI이다. –