Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung des Umschreibens von C++-Funktionen: Das Geheimnis des Überschreibens übergeordneter Klassenfunktionen

Detaillierte Erläuterung des Umschreibens von C++-Funktionen: Das Geheimnis des Überschreibens übergeordneter Klassenfunktionen

王林
王林Original
2024-05-04 08:12:021181Durchsuche

Das Überschreiben von C++-Funktionen ermöglicht es Unterklassen, übergeordnete Klassenfunktionen zu überschreiben und ihre eigene spezifische Implementierung bereitzustellen. Die Unterklasse muss eine Funktion mit demselben Namen und Parametertyp wie die übergeordnete Klasse deklarieren und sie mit dem Schlüsselwort override markieren. Überschreibende Funktionen können verwendet werden, um die Funktionalität einer übergeordneten Klasse zu erweitern, eine spezifische Implementierung für eine Unterklasse bereitzustellen oder eine konkrete Implementierung einer abstrakten Funktion bereitzustellen.

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

Detaillierte Erklärung des C++-Funktionsumschreibens: Das Geheimnis des Überschreibens von übergeordneten Klassenfunktionen

Überblick

Funktionsumschreiben ist eine leistungsstarke Funktion in der objektorientierten C++-Programmierung, die es Unterklassen ermöglicht, Funktionen in übergeordneten Klassen neu zu definieren Die Funktion. Durch Überschreiben kann eine Unterklasse die Implementierung der übergeordneten Klasse überschreiben und ihre eigene spezifische Funktionalität bereitstellen.

Syntax

Um eine Funktion zu überschreiben, muss die Unterklasse eine Funktion mit demselben Namen und Parametertyp wie die übergeordnete Klasse deklarieren:

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

wobei:

  • override Schlüsselwort die angibt Funktion Umgeschriebene Funktionen in der übergeordneten Klasse. 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 ist der Name der überschriebenen Funktion.
🎜ParameterList ist die Parameterliste der überschriebenen Funktion. 🎜🎜ReturnType ist der Rückgabetyp der überschriebenen Funktion (kann sich von der übergeordneten Klassenfunktion unterscheiden). 🎜🎜🎜🎜Praktischer Fall🎜🎜🎜Stellen Sie sich eine Formbasisklasse Shape vor, die eine Funktion getArea() enthält, die die Fläche berechnet. Die Unterklassen Rectangle und Circle erben jeweils Shape und müssen ihre eigene Flächenberechnungsmethode bereitstellen: 🎜rrreee🎜🎜Ausgabe🎜🎜rrreee🎜In diesem Beispiel , Rectangle und Circle schreiben die Funktion getArea() in Shape um, um ihre jeweiligen Flächenberechnungen bereitzustellen. Wenn der Zeiger der übergeordneten Klasse auf das Objekt der untergeordneten Klasse zeigt, wird die überschriebene Funktion aufgerufen. 🎜🎜🎜Verwendungsszenarien🎜🎜🎜Das Umschreiben von Funktionen wird normalerweise in den folgenden Szenarien verwendet: 🎜🎜🎜Wenn die Funktion der übergeordneten Klasse erweitert oder geändert werden muss. 🎜🎜Wenn Sie verschiedenen Unterklassen spezifische Funktionen bereitstellen müssen. 🎜🎜Wenn es notwendig ist, eine konkrete Implementierung einer abstrakten Funktion (rein virtuelle Funktion) in der Basisklasse bereitzustellen. 🎜🎜🎜🎜Hinweise🎜🎜🎜🎜Die überschriebene Funktion muss dieselbe Signatur (Name, Parametertyp, Rückgabetyp) wie die übergeordnete Klassenfunktion haben. 🎜🎜Bei virtuellen Funktionen können von Unterklassen überschriebene Funktionen unterschiedliche Zugriffsmodifikatoren haben (z. B. kann eine geschützte übergeordnete Klassenfunktion als öffentliche Unterklassenfunktion überschrieben werden). 🎜🎜Eine Unterklasse kann nur nicht statische Funktionen in der übergeordneten Klasse überschreiben. 🎜🎜Überschriebene Funktionen werden normalerweise mit dem Schlüsselwort override gekennzeichnet, dies ist jedoch nicht erforderlich. 🎜🎜

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Umschreibens von C++-Funktionen: Das Geheimnis des Überschreibens übergeordneter Klassenfunktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn