>백엔드 개발 >C++ >다형성은 C++의 함수 오버로딩과 어떻게 상호 작용합니까?

다형성은 C++의 함수 오버로딩과 어떻게 상호 작용합니까?

WBOY
WBOY원래의
2024-06-05 18:03:05615검색

다형성과 함수 오버로드는 상호 작용합니다. 기본 클래스에서 오버로드된 함수를 만들고 파생 클래스에서 이러한 함수 버전을 재정의합니다. 상위 클래스 포인터 또는 참조는 하위 클래스 객체를 가리키고 객체의 실제 유형에 따라 다른 메서드를 호출할 수 있습니다. 샘플 코드에서 Shape 기본 클래스는 Area() 순수 가상 함수를 선언하고 파생 클래스 Rectangle 및 Circle은 Area() 메서드를 재정의하여 해당 면적을 계산합니다.

C++ 中多态性如何与函数重载相互作用?

C++에서 다형성과 함수 오버로딩의 상호 작용

C++에서 함수 오버로딩을 사용하면 동일한 함수 이름을 사용하여 다양한 매개변수 목록을 가진 다양한 버전의 함수를 생성할 수 있습니다.

다형성을 사용하면 하위 클래스 객체를 상위 클래스 유형으로 처리할 수 있습니다. 이를 통해 부모 클래스는 자식 클래스 개체에 대한 포인터나 참조를 가리킬 수 있으므로 개체의 실제 유형에 따라 다양한 메서드를 호출할 수 있습니다.

다형성과 함수 오버로딩을 함께 사용하면 기본 클래스에서 오버로드된 함수를 만들고 파생 클래스에서 이러한 함수 버전을 재정의할 수 있습니다.

샘플 코드:

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

class Rectangle : public Shape {
public:
    Rectangle(double length, double width) : _length(length), _width(width) {}
    double area() override { return _length * _width; }

private:
    double _length, _width;
};

class Circle : public Shape {
public:
    Circle(double radius) : _radius(radius) {}
    double area() override { return 3.14 * _radius * _radius; }

private:
    double _radius;
};

int main() {
    Shape* shapes[] = {
        new Rectangle(4.5, 3.2),
        new Circle(2.5)
    };

    for (Shape* shape : shapes) {
        cout << shape->area() << endl;  // 调用正确的 area() 方法
    }

    return 0;
}

출력:

14.4
19.625

이 예에서 Shape 기본 클래스는 area() 순수 가상 함수를 선언합니다. 파생 클래스 RectangleCirclearea() 메서드를 재정의하여 면적을 다르게 계산합니다. Shape 基类声明了一个 area() 纯虚函数。派生类 RectangleCircle 重新定义 area() 方法,以不同的方式计算其面积。

main() 函数创建一个 Shape 指针数组,并将派生类对象存储在其中。循环遍历数组并调用 area()

main() 함수는 Shape 포인터 배열을 생성하고 그 안에 파생 클래스 객체를 저장합니다. 배열을 반복하고 area() 메서드를 호출하여 가리키는 객체의 실제 유형에 따라 적절한 메서드를 호출합니다. 🎜

위 내용은 다형성은 C++의 함수 오버로딩과 어떻게 상호 작용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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