가상 함수를 사용하면 파생 클래스의 기본 클래스 함수를 재정의하고 런타임 시 개체 유형에 따라 적절한 함수를 호출할 수 있습니다. 가상 함수 만들기: virtual 키워드를 사용하여 기본 클래스에서 함수를 선언합니다. 가상 함수 재정의: 파생 클래스에서 override 키워드를 사용하여 기본 클래스 가상 함수를 재정의합니다. 실제 호출: 기본 클래스 포인터나 참조를 통해 파생 클래스 개체를 가리킬 때 재정의된 버전이 호출됩니다. 발견된 가상 함수: 재정의되지 않은 경우 기본 클래스 원래 구현이 호출됩니다. 포인터 또는 참조를 사용하여 호출: 기본 클래스의 포인터 또는 참조가 파생 클래스 개체를 가리키도록 허용하고 런타임에 적절한 재정의 함수를 호출하는 다형성을 구현합니다.
가상 함수는 C++의 다형성 메커니즘입니다. 이를 통해 기본 클래스의 함수를 파생 클래스에서 재정의할 수 있으므로 개체의 실제 유형에 따라 런타임에 적절한 함수를 호출할 수 있습니다.
가상 함수를 만들려면 아래와 같이 virtual
키워드를 사용하여 기본 클래스에서 함수를 선언해야 합니다. virtual
关键字声明该函数,如下所示:
class Base { public: virtual void print() { cout << "Base class" << endl; } };
在派生类中,可以使用 override
关键字覆盖基类中的虚拟函数,如下所示:
class Derived : public Base { public: override void print() { cout << "Derived class" << endl; } };
考虑以下一个简单的示例:
#include <iostream> using namespace std; class Animal { public: virtual void speak() { cout << "Animal speaks" << endl; } }; class Dog : public Animal { public: override void speak() { cout << "Dog barks" << endl; } }; int main() { Animal* a = new Dog(); a->speak(); // 输出:Dog barks return 0; }
在这个示例中,基类 Animal
定义了 speak()
虚拟函数,它在 Dog
派生类中被覆盖。当我们通过 Animal*
指针调用 speak()
rrreee
override
키워드를 사용하여 다음과 같이 기본 클래스의 가상 함수를 재정의할 수 있습니다. rrreee실용적인 예
다음의 간단한 예를 생각해 보세요.rrreee
이 예에서는 기본 클래스 Animal
은 Dog
파생 클래스에서 재정의되는 speak()
가상 함수를 정의합니다. Animal*
포인터를 통해 speak()
함수를 호출하면 재정의된 버전이 호출되어 "개가 짖는다"를 출력합니다. 질문 해결
Q: 가상 함수를 호출하기 위해 포인터나 참조를 사용해야 하는 이유는 무엇입니까?
🎜🎜답변: 다형성을 달성하기 위해 기본 클래스의 포인터나 참조는 파생 클래스의 개체를 가리킬 수 있으며 런타임 시 적절한 재정의 함수가 호출될 수 있습니다. 🎜🎜🎜Q: 파생 클래스에서 가상 함수가 재정의되지 않으면 어떻게 되나요? 🎜🎜🎜답변: 이 경우 기본 클래스의 원래 구현이 호출됩니다. 🎜위 내용은 C++ 가상 함수의 실제 적용: 코드 예제 및 문제 해결의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!