간단한 클래스의 구현 및 선언 코드를 새로운 헤더 및 cpp 파일로 분리하는 방법에 대해 혼란스러워합니다. 예를 들어 다음 클래스의 코드를 어떻게 분리합니까?
class A2DD
{
private:
int gx;
int gy;
public:
A2DD(int x,int y)
{
gx = x;
gy = y;
}
int getSum()
{
return gx + gy;
}
};
답변
클래스 선언은 헤더 파일에 들어갑니다. #ifndef
포함 가드 를 추가 하거나 MS 플랫폼에있는 경우 사용할 수도 있습니다 #pragma once
. 또한 개인을 생략했습니다. 기본적으로 C ++ 클래스 멤버는 개인입니다.
// A2DD.h
#ifndef A2DD_H
#define A2DD_H
class A2DD
{
int gx;
int gy;
public:
A2DD(int x,int y);
int getSum();
};
#endif
구현은 CPP 파일로갑니다.
// A2DD.cpp
#include "A2DD.h"
A2DD::A2DD(int x,int y)
{
gx = x;
gy = y;
}
int A2DD::getSum()
{
return gx + gy;
}
답변
일반적으로 .h에는 모든 데이터와 모든 메소드 선언 인 클래스 정의가 포함됩니다. 귀하의 경우에 이와 같이 :
A2DD.h:
class A2DD
{
private:
int gx;
int gy;
public:
A2DD(int x,int y);
int getSum();
};
그리고 .cpp에는 다음과 같은 메소드의 구현이 포함되어 있습니다.
A2DD.cpp:
A2DD::A2DD(int x,int y)
{
gx = x;
gy = y;
}
int A2DD::getSum()
{
return gx + gy;
}
답변
프로젝트를 파일로 분할하려는 경우 허용되는 답변 절차가 필요하지 않다는 주제를 더 광범위하게 연구 할 때이 질문에 걸려 넘어지는 독자들에게 지적하는 것이 중요합니다. 단일 클래스의 다중 구현이 필요한 경우에만 필요합니다. 클래스 당 구현이 하나 인 경우 각각에 대해 하나의 헤더 파일이면 충분합니다.
따라서 허용 된 답변의 예 에서이 부분 만 필요합니다.
#ifndef MYHEADER_H
#define MYHEADER_H
//Class goes here, full declaration AND implementation
#endif
#ifndef 등 전 처리기 정의를 통해 여러 번 사용할 수 있습니다.
추신. C / C ++가 ‘dumb’이라는 사실을 알게되면 주제가 더 명확 해지며 #include는 “이 시점에서이 텍스트를 덤프”하는 방법 일뿐입니다.
답변
기본적으로 함수 선언 / 정의의 수정 된 구문 :
a2dd.h
class A2DD
{
private:
int gx;
int gy;
public:
A2DD(int x,int y);
int getSum();
};
a2dd.cpp
A2DD::A2DD(int x,int y)
{
gx = x;
gy = y;
}
int A2DD::getSum()
{
return gx + gy;
}
답변
A2DD.h
class A2DD
{
private:
int gx;
int gy;
public:
A2DD(int x,int y);
int getSum();
};
A2DD.cpp
A2DD::A2DD(int x,int y)
{
gx = x;
gy = y;
}
int A2DD::getSum()
{
return gx + gy;
}
아이디어는 모든 기능 서명과 멤버를 헤더 파일에 보관하는 것입니다.
이를 통해 다른 프로젝트 파일은 구현을 몰라도 클래스의 모습을 볼 수 있습니다.
그 외에도 헤더 대신 다른 헤더 파일을 구현에 포함시킬 수 있습니다. 헤더 파일에 포함 된 헤더가 헤더 파일을 포함하는 다른 파일에 포함 (상속)되므로 중요합니다.
답변
헤더 파일에 선언을 남깁니다.
class A2DD
{
private:
int gx;
int gy;
public:
A2DD(int x,int y); // leave the declarations here
int getSum();
};
그리고 정의를 구현 파일에 넣습니다.
A2DD::A2DD(int x,int y) // prefix the definitions with the class name
{
gx = x;
gy = y;
}
int A2DD::getSum()
{
return gx + gy;
}
둘을 섞어서 getSum()
예 : 헤더에 정의를 ). 이것은 컴파일러가 예를 들어 인라인에서 더 나은 기회를 제공하기 때문에 유용합니다. 그러나 구현을 변경하면 (헤더에 남아있는 경우) 헤더를 포함하는 다른 모든 파일의 재 구축이 트리거 될 수 있습니다.
템플릿의 경우 모든 템플릿을 헤더에 보관해야합니다.
답변
일반적으로 헤더 파일에는 선언과 실제로 짧은 인라인 함수 만 넣습니다.
예를 들어 :
class A {
public:
A(); // only declaration in the .h unless only a short initialization list is used.
inline int GetA() const {
return a_;
}
void DoSomethingCoplex(); // only declaration
private:
int a_;
};