2014-06-24 3 views
1

C++에서 두 헤더의 클래스 멤버 정의를 분할 할 수 있습니까? 코드를 작성하는 적절한 방법은 무엇입니까?C++ 클래스 정의가 두 개의 헤더로 분할 되었습니까?

a2.cpp

[extend] class A { 
    public: 
     void foo2(double c); 
} 

a2.h

#include "a1.h" 

void A::foo1(int b) { 
    cout << b; 
} 

a1.cpp

class A { 
    public: 
     int var; 
     void foo1(int b); 
} 

a1.h : 예컨대

#include "a2.h" 

void A::foo2(double c) { 
    cout << c; 
} 
+0

Microsoft의 부분 클래스 확장 외에도 PImpl을 많이 수행 할 수있는 방법은 없습니다 (단, 내가 잘못 기억하고 있고 C++ 지원이 전혀없는 경우 제외). – chris

+0

표준 C++에서는 이것이 불가능합니다. 이 기술로 어떤 문제를 해결하고 싶습니까? 우리가 그 문제를 도와 드릴까요? :) –

+0

@ Magnus Hoff 자주 수정되는 수업입니다. saparate .cpp 및 .h에서 작업중인 메소드를 유지하면 해당 변경 코드를 빠르게 컴파일 할 수 있습니다. – Davinish

답변

3

당신은 class 그런 식으로 확장 할 수 없습니다, 그러나 당신은 pimpl 패턴을 사용할 수 있습니다 모든 개인 정보를 숨 깁니다 AImpl.hAImpl.cpp이 다음

class A { 
public: 
    void foo1(int b); 
private: 
    AImpl* pimpl; 

} 

하고 있습니다.

+0

그래서 Aimpl.h 및 AImpl.cpp에는 foo2()가 있고 A 클래스의 헤더에는 AImpl.h가 포함되어야합니까? foo2는 AImpl.cpp에서 어떻게 구현 될까요? – Davinish

+0

@Davinish 아니요, 그런 공용 멤버를 추가 할 수 없습니다. 어쩌면 클래스를 확장하기위한 상속을 고려해야합니다. –