C++의 가상 함수는 파생 클래스 개체의 종류를 모른 채 기본 클래스 포인터 목록을 만들고 파생 클래스의 메서드를 호출하는 데 사용합니다. 가상 기능은 런타임에 늦게 해결됩니다.
가상 기능의 주요 용도는 런타임 다형성을 달성하는 것입니다. 인라인 함수는 코드의 효율성을 높이는 데 사용됩니다. 인라인 함수의 코드는 인라인 함수가 호출될 때마다 컴파일 타임에 인라인 함수 호출 시점에서 대체됩니다.
기본 클래스 참조 또는 포인터를 사용하여 가상 함수를 호출할 때마다 인라인할 수 없지만 해당 클래스의 참조 또는 포인터 없이 개체를 사용하여 호출할 때마다 컴파일러가 컴파일 시간에 개체의 정확한 클래스를 알고 있기 때문에 인라인될 수 있습니다. 피>
예시 코드
#include<iostream> using namespace std; class B { public: virtual void s() { cout<<" In Base \n"; } }; class D: public B { public: void s() { cout<<"In Derived \n"; } }; int main(void) { B b; D d; // An object of class D B *bptr = &d;// A pointer of type B* pointing to d b.s();//Can be inlined as s() is called through object of class bptr->s();// prints"D::s() called" //cannot be inlined, as virtualfunction is called through pointer. return 0; }
출력
In Base In Derived