목차
C++에서 가상 함수의 실제 적용: 코드 예제 및 문제 해결
가상 함수 소개
가상 함수 만들기
覆盖虚拟函数
实战案例
백엔드 개발 C++ C++ 가상 함수의 실제 적용: 코드 예제 및 문제 해결

C++ 가상 함수의 실제 적용: 코드 예제 및 문제 해결

Apr 29, 2024 am 08:36 AM
c++ 가상 기능 실습

가상 함수를 사용하면 파생 클래스의 기본 클래스 함수를 재정의하고 런타임 시 개체 유형에 따라 적절한 함수를 호출할 수 있습니다. 가상 함수 만들기: virtual 키워드를 사용하여 기본 클래스에서 함수를 선언합니다. 가상 함수 재정의: 파생 클래스에서 override 키워드를 사용하여 기본 클래스 가상 함수를 재정의합니다. 실제 호출: 기본 클래스 포인터나 참조를 통해 파생 클래스 개체를 가리킬 때 재정의된 버전이 호출됩니다. 발견된 가상 함수: 재정의되지 않은 경우 기본 클래스 원래 구현이 호출됩니다. 포인터 또는 참조를 사용하여 호출: 기본 클래스의 포인터 또는 참조가 파생 클래스 개체를 가리키도록 허용하고 런타임에 적절한 재정의 함수를 호출하는 다형성을 구현합니다.

C++ 虚拟函数实战应用:代码示例与解疑

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

가상 함수 재정의

In 파생 클래스의 경우 override 키워드를 사용하여 다음과 같이 기본 클래스의 가상 함수를 재정의할 수 있습니다.

rrreee실용적인 예

다음의 간단한 예를 생각해 보세요.

rrreee

이 예에서는 기본 클래스 AnimalDog 파생 클래스에서 재정의되는 speak() 가상 함수를 정의합니다. Animal* 포인터를 통해 speak() 함수를 호출하면 재정의된 버전이 호출되어 "개가 짖는다"를 출력합니다.

질문 해결

Q: 가상 함수를 호출하기 위해 포인터나 참조를 사용해야 하는 이유는 무엇입니까?

🎜🎜답변: 다형성을 달성하기 위해 기본 클래스의 포인터나 참조는 파생 클래스의 개체를 가리킬 수 있으며 런타임 시 적절한 재정의 함수가 호출될 수 있습니다. 🎜🎜🎜Q: 파생 클래스에서 가상 함수가 재정의되지 않으면 어떻게 되나요? 🎜🎜🎜답변: 이 경우 기본 클래스의 원래 구현이 호출됩니다. 🎜

위 내용은 C++ 가상 함수의 실제 적용: 코드 예제 및 문제 해결의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

C++ 동시 프로그래밍에서 데이터 구조의 동시성 안전 설계? C++ 동시 프로그래밍에서 데이터 구조의 동시성 안전 설계? Jun 05, 2024 am 11:00 AM

C++ 동시 프로그래밍에서 데이터 구조의 동시성 안전 설계?

C++ 객체 레이아웃은 메모리에 맞춰 정렬되어 메모리 사용 효율성을 최적화합니다. C++ 객체 레이아웃은 메모리에 맞춰 정렬되어 메모리 사용 효율성을 최적화합니다. Jun 05, 2024 pm 01:02 PM

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

C++ STL에서 사용자 정의 비교기를 구현하는 방법은 무엇입니까? C++ STL에서 사용자 정의 비교기를 구현하는 방법은 무엇입니까? Jun 05, 2024 am 11:50 AM

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

C++에서 전략 디자인 패턴을 구현하는 방법은 무엇입니까? C++에서 전략 디자인 패턴을 구현하는 방법은 무엇입니까? Jun 06, 2024 pm 04:16 PM

C++에서 전략 디자인 패턴을 구현하는 방법은 무엇입니까?

Golang과 C++의 유사점과 차이점 Golang과 C++의 유사점과 차이점 Jun 05, 2024 pm 06:12 PM

Golang과 C++의 유사점과 차이점

C++ STL 컨테이너를 복사하는 방법은 무엇입니까? C++ STL 컨테이너를 복사하는 방법은 무엇입니까? Jun 05, 2024 am 11:51 AM

C++ STL 컨테이너를 복사하는 방법은 무엇입니까?

C++ 스마트 포인터의 기본 구현 원칙은 무엇입니까? C++ 스마트 포인터의 기본 구현 원칙은 무엇입니까? Jun 05, 2024 pm 01:17 PM

C++ 스마트 포인터의 기본 구현 원칙은 무엇입니까?

Actor 모델을 기반으로 C++ 다중 스레드 프로그래밍을 구현하는 방법은 무엇입니까? Actor 모델을 기반으로 C++ 다중 스레드 프로그래밍을 구현하는 방법은 무엇입니까? Jun 05, 2024 am 11:49 AM

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

See all articles