IT 프로그래밍/객체지향프로그래밍

컴파일 과정

기술1 2024. 6. 18. 14:36

컴파일 단계에서 이해

 

#include <iostream>
using namespace std;

class Foo;

class Bar {
public:
	Bar();
	Bar(Foo f);
	Foo* bar_func(int x);
};

int some_func();
int some_func2(Foo f);

int main() {
	Bar b;
	Foo* p_foo = b.bar_func(10);
	int result = some_func();
	return 0;
}

Foo 타입의 객체를 생성하거나 그런 부분은 없습니다. 컴파일 되기 위해서는 이름만 필요로 하기 때문에 컴파일 단계에선 forward declaration만으로 충분하다는 것입니다. 

 

실제적인 정의는 다른 파일에 있을 것이라고 가정을 하는 것이빈다. 이것이 링커의 몫인 것입니다. 

 

즉 class Foo에서 멤버를 access하거나 그러지 않아도 되고 어떤 타입의 매개변수를 선언하거나 이 클래스의 포인터같은 경우를 사용할 때 정의 전체가 있어야 하는 것은 아닙니다. 왜냐하면 class Foo의 일므만 declaration되어 있어도 사용하지 않기 때문에 괜찮은 것입니다. 

 

함수들 같은 경우 이름만 선언이 되어 있고 구현되지 않아도 상관은 업습니다. 물론 링킹에는 문제가 생기겠지만 컴파일 단계에선 문제가 없다는 것입니다. 

 

 

헤더 파일 ex)song.h 같은 -> song.cpp -> song.obj -> PlayListApp.exe 

 

이렇게 진행이 되는 것입니다. preprocessor 과정, compiler과정, linker과정이 있습니다. 

 

 

'IT 프로그래밍 > 객체지향프로그래밍' 카테고리의 다른 글

메서드 오버라이딩  (0) 2024.06.19
상속이란?  (0) 2024.06.19
복사생성자  (0) 2024.06.17
객체의 복사와 삭제  (0) 2024.06.17
다항식 계산기 (code12. cpp 수정  (0) 2024.06.16