January 12, 2020 ( last updated : January 11, 2020 )
c++
https://github.com/gmm117/gmm117.github.io
C++ 특징
가상함수
- 포인터의 자료형을 기반으로 호출대상을 결정하지 않고, 포인터 변수가 실제로 가리키는 객체를 참조하여 호출의 대상을 결정하는 것
가상함수 하는 이유
- C++ 컴파일러는 포인터의 연산의 가능성 여부를 판단할 때, 포인터의 자료형을 기준으로 판단하지, 실제 가리키는 객체의 자료형을 기준으로 판단 하지 않으므로, 실제 가리키는 객체를 호출하기 위해서 가상함수가 필요함.
가상함수 예제
Third *tptr = new Third();
Second *sptr = tptr;
First * fptr = sptr;
tptr->FirstFunc() (o)
tptr->SecondFunc() (o)
tptr->ThirdFunc() (o)
sptr->FirstFunc() (o)
sptr->SecondFunc() (o)
sptr->ThirdFunc() (o)
fptr->FirstFunc() (o)
fptr->SecondFunc() (o)
fptr->ThirdFunc() (o)
순수가상함수
- 함수의 몸체가 정의되지 않은 함수
virtual int GetPay() const = 0;
추상클래스
1) 객체 생성이 불가능한 클래스 2) 하나 이상의 순수 가상 함수 포함
가상소멸자
- 객체의 소멸과정에서는 delete 연산자에 사용된 포인터 변수의 자료형에 상관없이 모든 소멸자가 호출되어야 할 경우에 virtual 선언해서 가상소멸자를 구현해줘야한다. 하나 이상의 가상함수가 있을 경우 무조건 가상소멸자를 호출해줘야한다.
vitual ~First();
Originally published January 12, 2020
Latest update January 11, 2020
Related posts :