2013-07-20 5 views
-1

저는 C++을 처음 접했고 실제로이 과거의 많은 것을 배웠습니다. 방금 여러 파일을 링크하는 방법이나 "헤더"를 사용하여 내가 생각하는 것을 배웠습니다.Cpp 연결/헤더, 왜 이렇게 했습니까?

제 질문은 헤더 및 링크 파일과 관련되어 있습니다.

나는 당신이 헤더 파일에서 클래스, 구조체 또는 기능을 "정의"한다고 가정되었다. 그런 다음 해당 C 플러스 플러스 파일에서 정의를 설정합니까? 여기에 내가 뭐하는 거지, 그리고 여기에 내가 그것을 읽어 어디 : http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1044842972&id=1043284392

header.h가 파일 코드

#ifndef HEADER_H 
#define HEADER_H 
class simple_math{ 
public: 
    int add(int, int); 
    int subtract(int, int); 
}; 

#endif 

extras.cpp 파일 코드

#include "header.h" 

int math::add(int x, int y){ 
    return (x + y); 
}; 

int math::subtract(int x, int y){ 
    return(x - y); 
}; 

왜 실제 .cpp 파일에서 모든 작업을 수행하지 마십시오. 헤더 파일에 선언 코드를 게시 한 다음, 잘못된 용어를 사용하면 프로토 타입을 별도의 .cpp 파일로 작성하는 이유는 무엇입니까?
내게 이상한 것처럼 보입니다. 그 중 일부는 이러한 함수 또는 클래스 메서드는 헤더에서 "#included"(나는 추측)조차하지 않는 .cpp 파일에 정의 된 얻을 방법. 대신, 헤더는 .cpp 파일에 포함되어 있으며 코드는 여전히 제대로 실행됩니다.

+0

클래스는 상태를 캡슐화하지 않습니다. 대신에 두 함수에 네임 스페이스를 사용할 수 있습니다. 또한 소스 파일은'math :: add()'가 아니라'simple_math :: add()'를 참조해야합니다; 뭔가가 거기 묶여 있지 않습니다. '중복 가능'질문은 헤더 파일을 사용하는 이유를 설명합니다. 기본적으로 헤더 파일은 소스 파일간에 공유되며 소스 파일이 공유 정보의 동일한 정의를 사용하는지 확인합니다. –

+0

그건 나쁘지, 여기에 게시 할 때 기본 "수학"을 "단순한 수학"으로 변경했습니다. 나는 실제로 그렇게 처형 당하지 않았다. –

답변

2

헤더 파일 은 사용할 수있는 파일이이라고 선언합니다.

이 클래스/메소드/함수에 액세스 할 수 있다는 것을 컴파일러에게 알려주고이를 사용하여 (확인을 위해) 어떻게 사용할 수 있는지 알려줍니다.

.cpp 파일에는 실제로 기능을 생성하는 코드가 들어 있습니다. 한 번만 컴파일하면되고 다른 여러 .cpp 파일은이 파일을 사용하는 방법을 알아야합니다. 헤더 파일이 들어오는 곳이 있습니다. 다른 .cpp 파일은 헤더 파일을 포함 할 수 있으며 사용 가능한 파일을 알 수 있습니다.

당신은 오브젝트 파일을 많이 가지고

이제 연결 단계를 온다. 일부는 (전부는 아닐지라도) 사용할 수있는 다양한 함수/메소드/클래스가 있다고 말했지만, 다른 곳에서는 존재하기 때문에 실행을위한 기계 코드를 포함하지 않습니다. 링크는 일부 뜨개질을하고 실행 파일을 생성하기 위해 다른 객체의 함수 등에 대한 이러한 매달린 참조를 해결합니다.

물론 이것은 템플릿에 대해 조금씩 나뉘어집니다.하지만 그것은 또 다른 게시물입니다.

BTW :

그것은 simple_math.cppsimple_math.hheader.hextras.cpp를 호출 관례이다.

또한 int math::addsimple_math:add이어야합니다. 다른 방법으로 동감.

관련 문제