묻공러
[C++ Tips] Virtual Function
묻공러
묻지마공부
묻공러
전체
오늘
어제
  • 분류 전체보기 (487)
    • C (54)
      • [코드조선] C 핵심 (35)
      • [언어본색] C 기초 (19)
    • C++ (72)
      • [루키스] C++ (9)
      • [루키스] 콜백함수 (6)
      • [루키스] STL (8)
      • [루키스] Modern C++ (11)
      • [노코프] C++ (10)
      • [노코프] Tips (16)
      • [일지] C++ (12)
    • 자료구조 & 알고리즘 (50)
      • [코드조선] C 자료구조 & 알고리즘 (6)
      • [합격자되기] C++ 코딩테스트 (12)
      • [루키스] C++ 자료구조 & 알고리즘 (32)
    • CS (69)
      • [널널한 개발자] CS 개론 (19)
      • [혼자 공부하는] 컴퓨터 구조 (16)
      • [혼자 공부하는] 운영체제 (18)
      • [널널한 개발자] 네트워크 (16)
    • 게임 그래픽스 (46)
      • [전북대] OpenGL (25)
      • [일지] DirectX (21)
    • 게임 엔진 (124)
      • [코드조선] 언리얼 (53)
      • [코드조선] 언리얼 데디서버 (8)
      • [일지] 언리얼 (59)
      • [일지] 언리얼 (2) (3)
      • 유니티 (1)
    • 게임 서버 (17)
    • 게임 수학 & 물리 (19)
      • 게임 수학 (12)
      • 게임 물리 (7)
    • GIT & GITHUB (4)
    • 영어 (18)
      • [The Outfit] 대본 공부 (11)
      • the others (7)
    • 그 외 (14)
      • In (5)
      • Out (5)
      • Review (4)

인기 글

최근 글

hELLO · Designed By 정상우.
C++/[노코프] Tips

[C++ Tips] Virtual Function

2024. 4. 6. 12:10

Virtual function은 dynamic function binding이며 런타임 중 바인딩이 된다

function overloading은 static function binding이며 컴파일 시 바인딩이 된다

 

virtual 키워드가 사용되면

virtual table pointer (8바이트)가 추가되고

그에 맞게 padding이 진행되어 사이즈가 결정된다

virtual table pointer를 타고 가면 나오는 virtual table에

해당하는 클래스의 멤버 함수들이 저장되어 있기 때문에

부모 클래스로 자식을 생성하더라도 자식 멤버 클래스가 실행이 된다

 

또한, 아래의 코드에서 볼 수 있듯이

런타임 중 발생하는 상황에 따라서

바인딩이 달라질 수 있다

 

#include <iostream>
#include <vector>

class Base
{
private:
	int a;
	// VTable * vt;// 8바이트

public:
	virtual void f();
}

class Derived : public Base
{
public:
	void f() override;
}

int main()
{
	std::cout << sizeof(Base) << std::endl;
	// 4바이트 + padding(4바이트) + 8바이트 = 16바이트

	Derived d;
	Base b;

	Base* pb;
	if (condition)// 런타임 중 결정
	{
		pb = &d;
	}
	else 
	{
		pb = &b;
	}

}
저작자표시 비영리 변경금지 (새창열림)

'C++ > [노코프] Tips' 카테고리의 다른 글

[C++ Tips] std::string  (0) 2024.04.06
[C++ Tips] 상속의 문제점  (0) 2024.04.06
[C++ Tips] 클래스/구조체 멤버 정렬  (0) 2024.04.05
[C++ Tips] switch case  (0) 2024.04.05
[C++ Tips] Unit Test  (0) 2024.04.05
'C++/[노코프] Tips' 카테고리의 다른 글
  • [C++ Tips] std::string
  • [C++ Tips] 상속의 문제점
  • [C++ Tips] 클래스/구조체 멤버 정렬
  • [C++ Tips] switch case
묻공러
묻공러
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.