TIL::Today I Learn

[TIL] 20230727

madylin 2023. 7. 28. 14:47
반응형

오늘 공부한 내용📓

- C++

개념 공부

클래스 포워드 선언(Forward Declaration)

  • 포워드 선언이란, 클래스의 선언을 미루어서 순환참조를 피하는 방법
    • 순환참조는 A.hpp 파일과 B.hpp 파일에서 서로를 include 하는 상황에서 발생하는 에러
    //A.hpp
    
    #include "B.hpp"
    
    class A
    {
    	//클래스 내용
    }
    
    //B.hpp
    
    #include "A.hpp"
    
    class B
    {
    	//클래스 내용
    }
    
    • 컴파일러가 클래스를 정확히 인식하지 못하여 에러가 발생함
  • 클래스의 멤버 변수나 멤버 함수를 선언하지 않고, 클래스의 이름만을 미리 선언하는 방법
  • 해당 클래스를 사용하는 코드에서는 클래스의 세부 구현을 알 필요 없이 클래스의 포인터나 참조를 사용할 수 있음
  • 클래스의 멤버 변수나 멤버 함수와 같은 세부 내용이 필요한 경우에는 헤더 파일의 하단에 해당 클래스의 헤더 파일을 포함시켜주어야 함
//A.hpp

class B;

class A
{
	//클래스 내용
}

#include "B.hpp"
//B.hpp

class A;

class B
{
	//클래스 내용
}

#include "A.hpp"

가상 함수

  • 가상함수는 ‘virtual’ 키워드를 사용하여 선언한 함수를 의미
  • 가상 함수 테이블은 대체로 아래 순서로 구현됨
    • ‘virtual’ 키워드를 사용하여 가상 함수 선언
    • 클래스에 대한 가상 함수 테이블을 생성함. 가상 함수 테이블은 가상 함수들에 대한 포인터들의 배열
    • 객체에 가상 함수 테이블 포인터를 추가하여, 해당 클래스의 가상함수 테이블을 가리키게 함
    • 가상함수 호출 시, 해당 클래스의 가상 함수 테이블 포인터를 따라가 적절한 가상 함수를 찾아 호출

 

 

제가 공부한 내용을 기록하고 있습니다.

혹시 수정이 필요한 부분이 있다면, 댓글로 지적 부탁드립니다!

선한 관심과 도움 감사드립니다😊

반응형