본문 바로가기

Programming/C/C++

C++/C++ 프로그램 작성법

반응형

헤더 파일과 cpp 파일 분리


클래스마다 클래스의 선언부와 구현부를 헤더 파일과 cpp 소스 파일로 분리하면 프로그램 전체를 관리하기 쉬울 뿐더러, 클래스를 다른 프로그램에서 재사용하기 쉽다. 클래스를 활용하는 모든 코드들은 클래스의 대한 선언이 필요하므로, 따로 분리해 놓은 헤더 파일에 선언부가 선언 되어 있으면 헤더파일만 include하여 재사용하면 된다. 


다음과 같은 원칙으로 분리하여 C++의 소스코드를 작성하는 것이 바람직하다.

* 클래스마다 선언부는 헤더 파일에, 구현부는 cpp파일에 분리하여 작성한다.

* main() 등 함수나 전역 변수는 한 개 이상의 cpp 파일에 나누어 작성한다.


visual stdio 솔루션 상 파일 저장 구조는 이렇다.



Circle.h - 선언부

1
2
3
4
5
6
7
8
class Circle {
private:
    int radius;
public:
    Circle();
    Circle(int r);
    double getArea();
};
cs


Circle.cpp - 구현부

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
#include "Circle.h"
 
Circle::Circle() {
    radius = 1;
    cout << "반지름 " << radius;
    cout << " 원 생성" << endl;
}
 
Circle::Circle(int r) {
    radius = r;
    cout << "반지름 " << radius;
    cout << " 원 생성" << endl;
}
double Circle::getArea() {
    return 3.14*radius*radius;
}
 
cs


main.cpp - main()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
 
#include "Circle.h"
 
int main() {
    Circle donut;
    double area = donut.getArea();
    cout << "donut의 면적은 " << area << endl;
 
    Circle pizza(30);
    area = pizza.getArea();
    cout << "pizza의 면적은" << area << endl;
}
cs


실행 결과


헤더 파일을 중복 include 할 때 생기는 문제점 해결


문제가 생기는 예시로 

1. a.h 헤더 파일에서 b.h헤더 파일을 include

2. cpp 파일에서 a.h파일과 b.h 파일을 inlcude

3. b.h 파일이 두번 include 된 것


문제 해결은 헤더 파일에 조건 컴파일 문을 삽입하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef CIRCLE_H
#define CIRCLE_H
 
class Circle {
private:
    int radius;
public:
    Circle();
    Circle(int r);
    double getArea();
};
 
#endif
 
cs


main ()에서 include "Circle.h" 실행 될때 CIRCLE_H 가 define 되어 있지 않으므로 Circle.h가 include되고, 그 이후는 CLRCLE_H가 정의 되어 있으므로 #ifndef (not define)에 의해서 include되지 않는다.

반응형

'Programming > C/C++' 카테고리의 다른 글

C++/객체 포인터  (0) 2017.10.23
C++/헤더 파일과 cpp 파일로 분리 예시  (0) 2017.10.23
C++/C++ 구조체  (0) 2017.10.23
C++/인라인 함수  (0) 2017.10.23
C++/접근지정자  (0) 2017.10.22