표준 라이브러리는 <>
내가 만든 것은 ""
함수나 클래스등의 정보를 컴파일러에게 알리기 위해 먼저 선언부를 작성하는 것
아래의 코드를 보면 Fruit 클래스의 정의가 없어도 잘 수행되는 것을 볼 수 있다.
#include<iostream>
using namespace std;
class Fruit; //클래스 forward declaration
void Eat(Fruit* a); //함수에 대한 선언
class Person {
int a;
Fruit* apple=nullptr;
public:
void Eat_apple()
{
Eat(apple);
}
};
void Eat(Fruit* a) // 함수의 정의
{
if (a == nullptr)
cout << "과일이 없습니다.";
}
int main()
{
Person p1;
p1.Eat_apple();
}
클래스에 멤버가 객체 라면 해당 객체의 클래스를 가리키는 헤더가 필요하지만
포인터라면 4 or 8 바이트 크기이므로 헤더 없이도 가능하다. 단 전방선언을 해줘야 한다.
클래스안에 멤버로 자신 클래스를 넣는다면? 무한루프
포인터로 넣어야 한다.
순환 참조를 방지할 수도 있다.