필자는 항상 헤더 파일을 클래스를 설명하는 일종의 '공개 인터페이스'로 생각했습니다.이 경우 cpp 파일에 비공개 필드 및 함수를 유지하는 것이 좋습니다.C++, 개인 함수가 실제로 헤더 파일에 있어야합니까?
개인 필드가 헤더에 있어야 클래스의 인스턴스가 소비 할 메모리 양을 다른 클래스에서 알 수 있지만 개인 도우미 함수를 작성하려고 할 때 발생했습니다. 함수를 정적으로 만들 수 있습니다.이 경우에는 클래스의 일부가 될 필요가 전혀 없으며 클래스 정의의 .cpp 파일에서 정규 함수가 될 수 있습니다.
는 그 다음 모든 개인 기능이 잠재적 클래스 필드에 대한 포인터/참조를 받아들이는 대신 클래스에 정의 될 것으로 예상하여 정적으로 재 작성 될 수 있다는 것을 나에게 발생했습니다.
이렇게하면 헤더 파일에 개인 함수를 선언 할 필요가 없습니다.
나는 이제 내가 물어보고 싶은 규칙을 따르도록 좋아 하는가, 그것은 비 정적 개인 기능 이 헤더 파일에 있어야한다는, C++로 확립 된 규칙을 고려입니까? 정적 함수 또는 정적 상수는 어떻습니까? 에서 someHelper(int* x)
것을
#ifndef SOME_CLASS_H
#define SOME_CLASS_H
class SomeClass
{
private:
int x;
public:
void combineWithX(int y);
};
#endif
.cpp 파일
#include "SomeClass.h"
void someHelper(int* x)
{
*x = (*x) + 1;
}
void SomeClass::combineWithX(int y)
{
someHelper(&x);
x += y;
}
참고 :
헤더 파일 : 나는에 얻고 무엇을 설명하는 몇 가지 코드에 넣어거야
편집 cpp 파일은 개인 회원 x를 영으로는 참조하지만 직접적으로는 참조하지 않으므로 헤더에 표시 할 필요가 없습니다. 이런 종류의 일이 '나쁜 스타일'로 간주되는지 궁금하네요.
개인 기능을 클래스 내부에서 불러 와야하거나 개인 구성원에 액세스 할 수 없다는 점에 유의하십시오. 그들에게 사적인 멤버가 필요하지 않다면 아마도 그 멤버들이 스스로 멤버가되어서는 안됩니다. –
일단 닫으면 확장을 위해 클래스를 다시 열 수 없기 때문에 (C++ 11 9.2-p2), 네 클래스 함수 * 및 * member vars *를 decl에 결합해야합니다. 원하는 경우 분명히 [pimpl] (http://stackoverflow.com/questions/843389/the-pimpli-idiom-in-practice) 구현을 수행 할 수 있습니다. – WhozCraig
@WhozCraig 덕분에, 나는 원래 더 나쁜 질문에 링크 된 귀하의 링크를 빌 렸습니다. –