클래스 코드를 헤더와 cpp 파일로 분리 public: A2DD(int x,int

간단한 클래스의 구현 및 선언 코드를 새로운 헤더 및 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_;
 };