Skip to main content

가상 기능이란 무엇입니까?

가상 함수는 슈퍼 클래스로 정의 된 함수이며, 해당 서브 클래스가 완전한 클래스 정의를 갖기 위해 서브 클래스로 존재해야합니다.가상 함수는 가상 키워드를 사용하여 C ++에서 가장 일반적으로 볼 수있는 가상 상속이라는 객체 지향 프로그래밍 패러다임에 의존합니다.가상 함수를 정의하기 위해서는 슈퍼 클래스와 서브 클래스라는 두 개의 클래스가 필요합니다.슈퍼 클래스는 함수가 처음 선언되어 정의 될 수있는 곳입니다.서브 클래스는 함수가 정의되는 곳 mdash;또는 슈퍼 클래스에서 함수가 정의되었는지에 따라 재정의 또는 재정의.첫째, 그것은 스터브로 정의 될 수 있으며, 여기서 빈 몸체가 있고 아무것도하지 않습니다.둘째, 순수한 가상 함수로 정의 될 수 있으며, 여기서 수퍼 클래스 헤더 파일에서 null로 정의됩니다.둘 다 방법론에는 장점과 단점이 있습니다.기능을 스텁으로 정의하면 모든 서브 클래스가 아무것도하지 않더라도 일부 구현을 가질 수 있습니다.그러나 기능을 무시하고 서브 클래스로 올바르게 구현하는 것을 잊어 버리면 오류 나 경고가이를 지적하는 것으로 보이지 않습니다.반면에 순수한 가상 함수를 정의하려면 각 서브 클래스는 기능에 대한 자체 정의를 가져야하며, 그렇지 않은 경우 오류가 나타납니다.가상 함수이므로 수준 이상의 상속 계층은 가상 함수에 대한 명시적인 정의가 필요하지 않을 수 있습니다.예를 들어, 하위 클래스 B에서 구현되는 가상 함수를 선언하는 클래스 A를 고려할 수 있습니다. 클래스 B 클래스 C 클래스 C는 클래스의 명시 적 정의가 포함되어 있지 않습니다.클래스 B의 정의는 필요한 경우 클래스 C는 클래스 BS 함수를 무시할 수 있거나 클래스 BS 함수를 호출하면서도 무시할 수 있습니다.다른 극단에서는 가상 함수가 해당 서브 클래스에서 가상으로 선언 된 경우 서브 클래스로 정의 할 필요가 없습니다.예를 들어, 가상 함수를 선언하고 두 개의 서브 클래스 B와 C를 갖는 클래스 A를 고려할 수 있습니다. 또한 클래스 B에 서브 클래스 d와 e가 있고 서브 클래스 c는 서브 클래스 F와 G를 가지고 있다고 상상할 수 있습니다.B부터 G에서 G에서 모든 사람은 가상 함수가 어떻게 든 정의 된 클래스를 가져야합니다.클래스 B에 AS 함수를 구현하는 경우 클래스 D와 E를 다시 작성할 필요가 없습니다.아마도 CS 서브 클래스는 기능으로 구현해야하지만 둘 다 다른 것을 수행하므로 클래스 C 자체의 함수를 정의하는 것이 유용하지 않습니다.이 경우 기능은 클래스 C에서 가상으로 선언 될 수 있으며 구현이 필요하지 않습니다..그러나 가상 함수, 특히 여러 상속에 관한 많은 함정이 있습니다.다중 상속에서는 모호하게 정의 된 가상 함수가 서로 충돌 할 수 있으므로 해당 맥락에서주의해서 사용해야합니다.