C++ 가상 함수의 실제 적용: 코드 예제 및 문제 해결
Apr 29, 2024 am 08:36 AM가상 함수를 사용하면 파생 클래스의 기본 클래스 함수를 재정의하고 런타임 시 개체 유형에 따라 적절한 함수를 호출할 수 있습니다. 가상 함수 만들기: virtual 키워드를 사용하여 기본 클래스에서 함수를 선언합니다. 가상 함수 재정의: 파생 클래스에서 override 키워드를 사용하여 기본 클래스 가상 함수를 재정의합니다. 실제 호출: 기본 클래스 포인터나 참조를 통해 파생 클래스 개체를 가리킬 때 재정의된 버전이 호출됩니다. 발견된 가상 함수: 재정의되지 않은 경우 기본 클래스 원래 구현이 호출됩니다. 포인터 또는 참조를 사용하여 호출: 기본 클래스의 포인터 또는 참조가 파생 클래스 개체를 가리키도록 허용하고 런타임에 적절한 재정의 함수를 호출하는 다형성을 구현합니다.
C++에서 가상 함수의 실제 적용: 코드 예제 및 문제 해결
가상 함수 소개
가상 함수는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

인기 기사

인기 기사

뜨거운 기사 태그

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











C++ 객체 레이아웃은 메모리에 맞춰 정렬되어 메모리 사용 효율성을 최적화합니다.

C++ STL에서 사용자 정의 비교기를 구현하는 방법은 무엇입니까?

Actor 모델을 기반으로 C++ 다중 스레드 프로그래밍을 구현하는 방법은 무엇입니까?
