>  기사  >  백엔드 개발  >  C++ 가상 함수에 대한 자세한 설명: 다형성 메커니즘의 수수께끼 풀기

C++ 가상 함수에 대한 자세한 설명: 다형성 메커니즘의 수수께끼 풀기

王林
王林원래의
2024-04-29 08:57:01372검색

C++ 가상 함수는 파생 클래스가 상위 클래스의 동작을 재정의할 수 있도록 하는 다형성을 달성하는 핵심입니다. 가상 함수로 선언되고 파생 클래스에 표시됩니다. 호출되면 컴파일러는 객체 유형에 따라 올바른 함수 버전을 동적으로 확인합니다. 순수 가상 함수는 파생 클래스가 다형성을 달성하기 위해 자체 구현을 제공하도록 강제합니다. 파생 클래스는 기본 클래스의 가상 함수를 재정의하여 다양한 동작을 구현합니다.

C++ 虚拟函数详解:解答多态机制之谜

C++ 가상 함수에 대한 자세한 설명: 다형성 메커니즘의 미스터리 해결

소개
다형성은 객체 지향 프로그래밍의 초석으로, 동일한 상위 클래스를 가진 객체를 다른 방식으로 처리할 수 있습니다. . C++의 다형성은 주로 가상 함수를 통해 구현됩니다. 이 기사에서는 가상 함수를 자세히 살펴보고 다형성 메커니즘을 쉽게 설명할 것입니다.

가상 함수의 본질
가상 함수는 가상 함수로 선언되고 파생 클래스의 객체에 나타나는 특별한 유형의 멤버 함수입니다. 가상 함수가 호출되면 컴파일러는 개체의 실제 유형을 기반으로 런타임 시 올바른 함수 버전을 동적으로 확인합니다. 이 기능을 사용하면 파생 클래스가 상위 클래스의 동작을 재정의하여 다형성을 달성할 수 있습니다.

구문
가상 함수의 선언 구문은 다음과 같습니다.

virtual 返回值类型 函数名(参数列表);

예:

class Shape {
public:
    virtual double面积() const = 0; // 纯虚函数
};

순수 가상 함수
순수 가상 함수는 함수 본문이 없고 구현되어야 하는 특수 가상 함수입니다. 파생 클래스에서. 파생 클래스가 자체 구현을 제공하도록 강제하여 다형성을 적용합니다.

사례
가상 함수의 실제 적용을 보여주기 위해 모양 추상 클래스 Shape와 두 파생 클래스 CircleRectangle을 고려해 보겠습니다. code>: <code>Shape 和其两个派生类 CircleRectangle

class Shape {
public:
    virtual double面积() const = 0; // 纯虚函数
};

class Circle : public Shape {
public:
    Circle(double radius) : _radius(radius) {}
    double面积() const override { return M_PI * _radius * _radius; }
private:
    double _radius;
};

class Rectangle : public Shape {
public:
    Rectangle(double width, double height) : _width(width), _height(height) {}
    double面积() const override { return _width * _height; }
private:
    double _width, _height;
};

int main() {
    Shape* circle = new Circle(5.0);
    Shape* rectangle = new Rectangle(10.0, 5.0);

    // 父类指针指向不同的派生类对象,但调用正确的面积函数版本
    double areaCircle = circle->面积();
    double areaRectangle = rectangle->面积();

    std::cout << "圆的面积:" << areaCircle << std::endl;
    std::cout << "矩形的面积:" << areaRectangle << std::endl;

    return 0;
}

在这个例子中,Shape 类声明了一个纯虚函数 面积()。派生类 CircleRectangle 分别覆盖了该函数,实现了各自的面积计算。在 main 函数中,通过父类指针访问派生类对象,并调用 面积()rrreee

이 예에서 Shape 클래스는 순수 가상 함수 Area()를 선언합니다. 파생 클래스 CircleRectangle은 각각 이 기능을 다루고 해당 면적 계산을 구현합니다. main 함수에서 파생 클래스 객체는 상위 클래스 포인터를 통해 액세스되고 area() 함수가 호출되지만 올바른 버전의 함수는 다음을 기반으로 실행됩니다. 객체의 실제 유형. 🎜

위 내용은 C++ 가상 함수에 대한 자세한 설명: 다형성 메커니즘의 수수께끼 풀기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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