본문 바로가기

프로그래밍

.cpp 및 헤더 파일에서의 include 다이렉티브

참고 c++ for game programmers

.cpp 파일에서의 include 다이렉티브

클래스의 구현을 포함하는 .cpp 파일 에서는 가장 먼저 해당 클래스의 헤더 파일을 포함한다.(미리 컴파일된 헤더를 이용할 때는 예외)

//MyClassA.h
class MyClassA
{
	//...
};


//MyClassA.cpp
#include "MyClassA.h" //가장 먼저 포함되는 파일은 클래스의 헤더 파일이다.
#include "MyClassC.h"
#include "SomethingElse.h"

//MyClassA 구현의 나머지 부분
//...


헤더 파일에서의 include 다이렉티브

상속 관계가 있을 때는 반드시 부모 클래스의 헤더 파일을 포함해야 한다.
클래스로의 포인터나 참조만을 이용하는 경우 클래스 이름의 전방선언(forward declaration)을 이용하면 된다. 헤더 파일에서 제거된 #include 문은 구현 파일에 추가 해야 한다.

//GameCamera.h
#include "GameEntity.h"//부모클래스의 헤더
class GamePlayer; // 전방 선언

class GameCamera : public GameEntity
{
	GamePlayer* GetPlayer();
private:
	GamePlayer* m_pPlayer;
};


//GameCamera.cpp
#include "GameCamera.h"
#include "GamePlayer.h"//전방 선언된 클래스의 헤더

//GameCamera 구현의 나머지 부분
//...


미리 컴파일된 헤더

동일한 헤더를 반복해서 포함해야 할경우 미리 컴파일된 헤더 옵션을 사용한다.

//Precomp.h
#include <iostream>
#include <list>
#include <vector>
#include <map>
#include <algorithm>

#include "MyClass1.h"
#include "MyClass2.h"
//...


//MyClassA.cpp
#include "percomp.h" //미리 컴파일된 헤더 파일
#include "MyClassA.h" //실제로 포함된 첫번째 헤더 파일은 클래스의 헤더 파일 이어야 한다.
#include "MyClassC.h"
#include "SomethingElse.h"

//MyClassA 구현의 나머지 부분
//...


'프로그래밍' 카테고리의 다른 글

[펌] 코드 정리 하기  (0) 2012.08.11
boost::intrusive_ptr  (0) 2012.07.25
Visual Studio 2010 부스트 빌드  (0) 2012.07.24
ACE 정보 및 기술 지원  (0) 2011.07.08
디자인 패턴, POSA, ACE 강좌 사이트  (0) 2011.06.21