>  기사  >  백엔드 개발  >  C++ 함수 재작성에 대한 자세한 설명: 상위 클래스 함수 재정의의 비밀

C++ 함수 재작성에 대한 자세한 설명: 상위 클래스 함수 재정의의 비밀

王林
王林원래의
2024-05-04 08:12:021130검색

C++ 함수 재정의를 사용하면 하위 클래스가 상위 클래스 함수를 재정의하고 고유한 특정 구현을 제공할 수 있습니다. 하위 클래스는 상위 클래스와 이름 및 매개변수 유형이 동일한 함수를 선언하고 이를 override 키워드로 표시해야 합니다. 재정의 함수는 부모 클래스의 기능을 확장하거나, 하위 클래스에 대한 특정 구현을 제공하거나, 추상 함수의 구체적인 구현을 제공하는 데 사용될 수 있습니다.

C++ 函数重写详解:覆盖父类函数的奥妙

C++ 함수 재작성에 대한 자세한 설명: 상위 클래스 함수 재정의의 비밀

Overview

함수 재작성은 C++ 객체 지향 프로그래밍의 강력한 기능으로, 하위 클래스가 상위 클래스의 함수를 재정의할 수 있게 해줍니다. 함수. 재정의를 통해 하위 클래스는 상위 클래스의 구현을 재정의하고 고유한 특정 기능을 제공할 수 있습니다.

Syntax

함수를 재정의하려면 하위 클래스는 상위 클래스와 동일한 이름과 매개변수 유형을 가진 함수를 선언해야 합니다.

class Child : public Parent {
public:
    ReturnType overrideName(ParameterList) override;
};

여기서:

  • override 키워드는 function 상위 클래스의 함수를 다시 작성했습니다. override 关键字表明该函数重写了父类中的函数。
  • overrideName 是重写函数的名称。
  • ParameterList 是重写函数的参数列表。
  • ReturnType 是重写函数的返回类型(可以与父类函数不同)。

实战案例

考虑一个形状基类 Shape,它包含一个计算面积的函数 getArea()。子类 RectangleCircle 分别继承 Shape,需要提供自己的面积计算方法:

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

class Rectangle : public Shape {
public:
    Rectangle(double width, double height) : m_width(width), m_height(height) {}
    
    double getArea() override {
        return m_width * m_height;
    }
private:
    double m_width;
    double m_height;
};

class Circle : public Shape {
public:
    Circle(double radius) : m_radius(radius) {}
    
    double getArea() override {
        return M_PI * m_radius * m_radius;
    }
private:
    double m_radius;
};

int main() {
    Shape* shapes[] = {new Rectangle(5, 10), new Circle(3)};
    
    for (Shape* shape : shapes) {
        cout << "Area: " << shape->getArea() << endl;
    }
    
    return 0;
}

输出

Area: 50
Area: 28.2743

在这个例子中,RectangleCircle 重写了 Shape 中的 getArea() 函数,提供了各自的面积计算。父类指针指向子类对象时,重写后的函数将被调用。

使用场景

函数重写通常用于以下场景:

  • 当需要对父类功能进行扩展或修改时。
  • 当需要为不同的子类提供特定功能时。
  • 当需要在基类中提供抽象函数(纯虚函数)的具体实现时。

注意事项

  • 重写函数必须与父类函数具有相同的签名(名称、参数类型、返回类型)。
  • 对于虚函数,子类重写函数可以具有不同的访问修饰符(例如,可以将一个受保护的父类函数重写为公共的子类函数)。
  • 一个子类只能重写父类中的非静态函数。
  • 重写函数通常使用 override
  • overrideName은 재정의된 함수의 이름입니다.
🎜ParameterList는 재정의된 함수의 매개변수 목록입니다. 🎜🎜ReturnType은 재정의된 함수의 반환 유형입니다(상위 클래스 함수와 다를 수 있음). 🎜🎜🎜🎜실용 사례🎜🎜🎜면적을 계산하는 getArea() 함수가 포함된 모양 기본 클래스 Shape를 생각해 보세요. 하위 클래스 RectangleCircle은 각각 Shape를 상속하며 고유한 면적 계산 방법을 제공해야 합니다. 🎜rrreee🎜🎜Output🎜🎜rrreee🎜이 예에서는 , RectangleCircleShapegetArea() 함수를 다시 작성하여 해당 면적 계산을 제공합니다. 상위 클래스 포인터가 하위 클래스 객체를 가리키면 재정의된 함수가 호출됩니다. 🎜🎜🎜사용 시나리오🎜🎜🎜함수 재작성은 일반적으로 다음 시나리오에서 사용됩니다. 🎜🎜🎜상위 클래스 함수를 확장하거나 수정해야 하는 경우. 🎜🎜다양한 하위 클래스에 특정 기능을 제공해야 하는 경우. 🎜🎜기본 클래스에서 추상 함수(순수 가상 함수)의 구체적인 구현을 제공해야 하는 경우. 🎜🎜🎜🎜Notes🎜🎜🎜🎜재정의된 함수는 상위 클래스 함수와 동일한 서명(이름, 매개변수 유형, 반환 유형)을 가져야 합니다. 🎜🎜가상 함수의 경우 하위 클래스 재정의 함수는 다양한 액세스 한정자를 가질 수 있습니다. 예를 들어 보호된 상위 클래스 함수는 공개 하위 클래스 함수로 재정의될 수 있습니다. 🎜🎜하위 클래스는 상위 클래스의 비정적 함수만 재정의할 수 있습니다. 🎜🎜재정의된 함수는 일반적으로 override 키워드로 표시되지만 필수는 아닙니다. 🎜🎜

위 내용은 C++ 함수 재작성에 대한 자세한 설명: 상위 클래스 함수 재정의의 비밀의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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