본문 바로가기
스터디/C++

[ C++ ] 파일 분할

by 알 수 없는 사용자 2019. 9. 20.

하나의 프로그램을 만들 때 하나의 소스파일에 모든 내용을 적진 않는다.

특히 C++에서는 클래스의 선언과 정의를 분리하는 경우가 많다.

 

 

클래스의 선언(declearation)은 클래스를 구성하는 외형적인 틀을 보여준다.

예로 들어서 거북이에 관한 클래스가 있다고 하자. ( 글쓴이는 거북이를 많이 좋아한다. )

 

< Turtle.h >

#ifndef __TURTLE_H__
#define __TURTLE_H__

namespace TURTLE_CONST
{
	enum
	{
		NAME_LEN = 20, SPEED = 100
	}
}

class Turtle
{
private:
	char turtle_name[TURTLE_CONST::NAME_LEN];
	int speed;
public:
	void InitMembers(char * name);
	void Walk();
	void Eat();
};

#endif

 

1-2행에 있는 전처리 지시문은 헤더 파일 중복 포함을 피하기 위함이다.

즉, 프로그램에서 한번만 헤더 파일을 포함하겠다는 얘기다.

 

이렇게 클래스에 대한 최소한의 틀을 보여주는 것이 클래스의 선언이다.

 

클래스의 정의(definition)은 선언과 달리 컴파일에 필요한 정보를 가지고 있지 않다.

따라서 함수의 정의는 컴파일된 이후에, 링커에 의해 하나의 실행파일로 묶이기만 하면 된다.

 

 

< Turtle.cpp >

#include <iostream>
#include <cstring>
#include "Turtle.h"

using namespace std;

void Turtle::InitMembers(char * name)
{
	strcpy(turtle_name, name);
	speed = TURTLE_CONST::SPEED;
}

void Turtle::Walk()
{
	cout<<"거북이가 "<<speed<<"km/s로 걷고 있습니다."<<endl;
}

void Turtle::Eat()
{
	cout<<"거북이가 밥을 먹고있습니다."<<endl;
}

 

이렇게 클래스의 함수에 대한 정의를 작성한 것이 클래스의 정의이다.