#include <>, "" 그리고 forward declaration

Oak_Cassia·2021년 11월 24일
0

#include

표준 라이브러리는 <>
내가 만든 것은 ""

forward declaration

함수나 클래스등의 정보를 컴파일러에게 알리기 위해 먼저 선언부를 작성하는 것

  • 클래스의 크기(?)
  • 함수의 반환 값 매개변수

아래의 코드를 보면 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 바이트 크기이므로 헤더 없이도 가능하다. 단 전방선언을 해줘야 한다.

클래스안에 멤버로 자신 클래스를 넣는다면? 무한루프
포인터로 넣어야 한다.

순환 참조를 방지할 수도 있다.

profile
rust로 뭐할까

0개의 댓글