>백엔드 개발 >C++ >C++에서 가상 함수를 선언하고 호출하는 방법은 무엇입니까?

C++에서 가상 함수를 선언하고 호출하는 방법은 무엇입니까?

WBOY
WBOY원래의
2024-04-12 16:03:021170검색

가상 함수는 파생 클래스가 기본 클래스의 멤버 함수를 재정의할 수 있도록 하는 다형성 메커니즘입니다. 선언: 함수 이름 앞에 virtual 키워드를 추가합니다. 호출: 기본 클래스 포인터 또는 참조를 사용하여 컴파일러는 파생 클래스의 적절한 구현에 동적으로 바인딩합니다. 실제 사례: 기본 클래스인 Shape와 파생 클래스인 Rectangle 및 Circle을 정의하여 다형성의 가상 함수를 적용하여 면적을 계산하고 모양을 그리는 방법을 보여줍니다.

C++ 中如何声明和调用虚函数?

C++의 가상 함수

가상 함수는 파생 클래스가 기본 클래스의 멤버 함수를 재정의할 수 있도록 하는 다형성 메커니즘입니다. 이를 통해 프로그래머는 파생 클래스가 해당 동작의 인스턴스별 구현을 제공하도록 허용하면서 기본 클래스에서 공통 동작을 정의할 수 있습니다.

가상 함수 선언

가상 함수를 선언하려면 함수 이름 앞에 virtual 키워드를 넣으세요. 예:

class Base {
public:
    virtual void print() const;
};

가상 함수 호출

기본 클래스 포인터 또는 참조를 사용하여 가상 함수를 호출합니다. 컴파일러는 파생 클래스의 적절한 구현에 동적으로 바인딩합니다. 예:

void doSomething(Base* base) {
    base->print();
}

실제 사례

다음은 가상 함수 사용 예입니다.

#include <iostream>

class Shape {
public:
    virtual double area() const = 0;
    virtual void draw() const = 0;
};

class Rectangle : public Shape {
public:
    Rectangle(double width, double height) : width_(width), height_(height) {}
    
    double area() const override { return width_ * height_; }
    void draw() const override { std::cout << "Drawing rectangle" << std::endl; }
    
private:
    double width_;
    double height_;
};

class Circle : public Shape {
public:
    Circle(double radius) : radius_(radius) {}
    
    double area() const override { return 3.14 * radius_ * radius_; }
    void draw() const override { std::cout << "Drawing circle" << std::endl; }
    
private:
    double radius_;
};

int main() {
    Shape* rectangle = new Rectangle(5, 10);
    Shape* circle = new Circle(5);
    
    std::cout << rectangle->area() << std::endl; // Output: 50
    std::cout << circle->area() << std::endl;   // Output: 78.5
    
    rectangle->draw();   // Output: Drawing rectangle
    circle->draw();     // Output: Drawing circle
    
    return 0;
}

위 내용은 C++에서 가상 함수를 선언하고 호출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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