2020. 9. 9. 01:39ㆍ컴퓨터 수업/C++
@솔루션 -> 프로젝트 -> 소스코드 순으로 위계가 존재한다.
소스코드의 확장자는 주로 cpp인데.
보통 메인함수가 cpp에 존재한다.
따라서 cpp에서 헤더를 include 하므로
헤더에선 cpp를 include 할 필요가 없다.
*20200910 추가)
@정의와 선언
cpp에는 정의, h에는 선언이라 생각하자 (식별자 identifier) (인스턴스화 되기 전의 클래스)
class.h와 function.h가 존재한다고 생각해보자,
class.h에는 특정 class의 내용, function에는 사용자 지정 함수 (not 멤버 함수)
@ 실제 사례
이때 main.cpp에는 구동 내용만 적으며 맨 위에 #include "class.h" , #include "function.h"
그리고 class.h에는 class의 identifier만 (데이터 멤버 선언하고, 멤버 함수의 원형만 선언) ,
function에는 사용자 지정 함수의 원형 prototype만 선언
그리고 class.cpp와 function.cpp에 각 메소드나 함수의 정의를 모두 수록하며
맨 위에 각. h를 include 한다. (ex. #include "class.h")
@좀 이상하지 않나
분명 #include ~~ 는 해당 자리에 해당 소스코드를 복붙 하는 것과 같이 기능한다고 배웠다.
반은 맞고 반은 틀렸다는 거지.
위계를 표현하자면,
이렇다는 건데, 그럼 뭐야, main에 전부 오는 게 아니라 여러 cpp 파일이 존재하는데? 아냐 그래도
한 프로젝트에 하나의 빌드니까 아직까진 할 수 있어.
라는 생각이 드는 게 당연하다.
따라서 위의 물리적 파일들은 다음과 같은 처리를 지난다.
여기서 add를 class나 function으로 생각하면 된다.
따라서 더 이상 순서가 중요해지지 않는다. (절차 지향적이 아님)
바로 객체지향적이여 지는 것이다.
cpp는 링킹 할 때 합해지고, h는 전처리기로써 인식되는 것이다.
따라서 만약 class.cpp에서 function.cpp의 내용을 갖다 쓰더라도 당연히 전처리기에서 class.h가 function.h의 존재를 파악했으니
런타임 에러가 발생하지 않는다.
'컴퓨터 수업 > C++' 카테고리의 다른 글
friend 함수 (0) | 2020.09.10 |
---|---|
오버로딩과 다형성 (오버로딩은 그냥 다른 datatype 지원 그 자체다.) (0) | 2020.09.10 |
this 포인터 (0) | 2020.09.10 |
선언과 정의 (0) | 2020.09.10 |
나는 포인터가 싫어요. (포인터변수와 참조자를 함수에 인자로 주고받는 것에 대해.) (0) | 2020.09.03 |