> 백엔드 개발 > C++ > 본문

C++ 함수 상속에 대한 자세한 설명: 다형성의 본질은 무엇입니까?

WBOY
풀어 주다: 2024-05-04 21:30:02
원래의
1078명이 탐색했습니다.

함수 상속 개요: C++의 함수 상속은 override 키워드를 통해 구현되어 하위 클래스가 상위 클래스 함수를 재정의할 수 있도록 하여 다형성을 가능하게 합니다. 즉, 객체가 동일한 상위 클래스에 속하더라도 런타임에 다른 동작을 표시합니다.

C++ 函数继承详解:多态的本质是什么?

C++ 함수 상속 자세한 설명: 다형성의 본질

객체 지향 프로그래밍에서 상속은 하위 클래스가 상위 클래스의 데이터 멤버와 멤버 함수를 상속할 수 있도록 하는 중요한 메커니즘입니다. 함수 상속이란 부모 클래스에서 자식 클래스로 멤버 함수를 상속하는 것을 말합니다.

다형성 소개

다형성은 객체가 동일한 상위 클래스에 속하더라도 런타임에 객체가 다르게 동작할 수 있도록 하는 객체 지향 프로그래밍의 핵심 개념입니다. 함수 상속은 다형성을 달성하는 방법입니다.

함수 상속

C++에서 함수 상속은 override 키워드를 통해 구현됩니다. 하위 클래스가 상위 클래스와 동일한 이름과 서명을 가진 함수를 정의하면 해당 함수는 override로 표시됩니다. 이는 하위 클래스가 상위 클래스의 함수를 재정의하고 있음을 컴파일러에 알립니다. override 关键字实现。当子类定义了一个与父类同名且具有相同签名的函数时,该函数被标记为 override。这会告诉编译器,子类正在覆盖父类的函数。

class Base {
public:
    virtual void print() {
        std::cout << "Base class" << std::endl;
    }
};

class Derived : public Base {
public:
    virtual void print() override {
        std::cout << "Derived class" << std::endl;
    }
};
로그인 후 복사

在此示例中,Base 类定义了一个 print() 函数,而 Derived 类通过 override 关键字覆盖了该函数。因此,当调用 Derived 类对象的 print() 函数时,它将打印 "Derived class",而不是 "Base class"。

虚函数

override 函数必须是虚函数。虚函数通过 virtual 关键字声明,它允许子类覆盖父类的函数。在上面的示例中,print() 函数是虚函数。

实战案例

下面是一个演示函数继承和多态的代码案例:

#include <iostream>

class Shape {
public:
    virtual double getArea() = 0;
};

class Rectangle : public Shape {
public:
    double width, height;
    Rectangle(double w, double h) : width(w), height(h) {}
    double getArea() override { return width * height; }
};

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

int main() {
    Shape* shapes[] = {new Rectangle(2, 3), new Circle(4)};

    for (int i = 0; i < 2; i++) {
        std::cout << "Area of " << (i == 0 ? "Rectangle" : "Circle") << ": " << shapes[i]->getArea() << std::endl;
    }

    return 0;
}
로그인 후 복사

在该案例中,Shape 是形状类的基类,它定义了一个纯虚函数 getArea()RectangleCircle 类从 Shape 类继承,并覆盖了 getArea() 函数以计算各自的面积。

main() 函数中,使用多态,一个基类数组被用于存储 RectangleCircle 对象。由于 getArea()rrreee

이 예에서 Base 클래스는 print() 함수를 정의하고 Derived 클래스는 override를 전달합니다. > 키워드는 이 기능을 재정의합니다. 따라서 파생 클래스 객체의 print() 함수가 호출되면 "기본 클래스" 대신 "파생 클래스"가 인쇄됩니다.

가상 함수🎜🎜override 함수는 가상 함수여야 합니다. 가상 함수는 virtual 키워드로 선언되며, 이를 통해 하위 클래스가 상위 클래스 함수를 재정의할 수 있습니다. 위의 예에서 print() 함수는 가상입니다. 🎜🎜실용 사례🎜🎜다음은 함수 상속과 다형성을 보여주는 코드 예제입니다. 🎜rrreee🎜이 경우 Shape는 순수 가상 함수를 정의하는 Shape 클래스의 기본 클래스입니다. 코드>getArea(). RectangleCircle 클래스는 Shape 클래스에서 상속되며 getArea() 함수를 재정의하여 해당 면적을 계산합니다. . 🎜🎜main() 함수에서는 다형성을 사용하여 기본 클래스 배열을 사용하여 RectangleCircle 객체를 저장합니다. getArea() 함수가 재정의되었으므로 개체 유형에 따라 올바른 영역이 인쇄됩니다. 🎜🎜함수 상속과 다형성을 통해 다양한 동작을 갖춘 유연하고 확장 가능한 프로그램을 구축할 수 있습니다. 🎜

위 내용은 C++ 함수 상속에 대한 자세한 설명: 다형성의 본질은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!