Heim > Backend-Entwicklung > C++ > Hauptteil

Umschreiben von C++-Funktionen in der Praxis: Ein Trick zum Implementieren unterklassenspezifischer Funktionen

WBOY
Freigeben: 2024-05-01 13:36:02
Original
923 Leute haben es durchsucht

Durch das Umschreiben von Funktionen können Unterklassen Funktionen mit demselben Namen wie die Basisklasse neu definieren, um unterklassenspezifische Funktionen zu implementieren: Wenn eine Unterklasse eine Funktion mit demselben Namen definiert, wird die Basisklassenfunktion basierend auf Namenssuche und Typübereinstimmung neu geschrieben. Dadurch können Unterklassen unterschiedliche Implementierungen bereitstellen. Beispielsweise überschreiben die Klassen Circle und Rechteck im Beispiel die Funktion „area()“ der Klasse „Shape“, um ihre eigene Fläche zu berechnen.

C++ 函数重写实战:实现子类专属功能的妙招

C++-Funktionsumschreiben: Implementierung unterklassenspezifischer Funktionen

Funktionsumschreiben ist ein wichtiger Mechanismus in C++, der es Unterklassen ermöglicht, das Verhalten von Funktionen mit demselben Namen in der Basisklasse neu zu definieren. Dies ist nützlich, um spezifische Funktionen speziell für eine Unterklasse zu definieren.

Prinzip

Das Umschreiben von Funktionen basiert auf Namenssuche und Typvergleichsregeln. Wenn eine Funktion aufgerufen wird, durchsucht der Compiler den Bereich nach einer Funktion mit einem passenden Namen. Werden mehrere überladene Funktionen gefunden, erfolgt die Auswahl nach dem Best-Match-Prinzip.

Wenn eine Unterklasse eine Funktion mit demselben Namen wie die Basisklasse definiert, überschreibt die Funktion in der Unterklasse die Funktion in der Basisklasse. Dadurch können Unterklassen eine andere Implementierung als die Basisklasse bereitstellen.

Praktischer Fall

Stellen Sie sich ein Szenario vor, in dem wir eine Shape-Basisklasse haben, die eine generische Form darstellt. Die abgeleiteten Klassen Circle und Rectangle repräsentieren Kreise bzw. Rechtecke. Wir müssen die Fläche dieser Formen berechnen. Basisklasse Shape Shape 基类,表示一个通用形状。派生类 CircleRectangle 分别表示圆形和矩形。我们需要计算这些形状的面积。

基类 Shape

class Shape {
public:
    virtual double area() const = 0;  // 纯虚函数
};
Nach dem Login kopieren

派生类 Circle

class Circle : public Shape {
public:
    Circle(double radius) : radius(radius) {}

    double area() const override {
        return M_PI * radius * radius;
    }

private:
    double radius;
};
Nach dem Login kopieren

派生类 Rectangle

class Rectangle : public Shape {
public:
    Rectangle(double width, double height)
        : width(width), height(height) {}

    double area() const override {
        return width * height;
    }

private:
    double width, height;
};
Nach dem Login kopieren

使用

我们可以使用这些类来计算不同形状的面积:

int main() {
    Circle circle(5.0);
    Rectangle rectangle(3.0, 4.0);

    std::cout << "Area of circle: " << circle.area() << std::endl;
    std::cout << "Area of rectangle: " << rectangle.area() << std::endl;

    return 0;
}
Nach dem Login kopieren

输出:

Area of circle: 78.5398
Area of rectangle: 12.0
Nach dem Login kopieren

在这个示例中,CircleRectangle 类重写了 Shape 类中定义的 area()rrreee

Ausgabe : 🎜rrreee 🎜In diesem Beispiel überschreiben die Klassen Circle und Rectangle die im Shapedefinierte Funktion area() > Klasse. Dadurch können wir eine für jede Form spezifische Flächenberechnungslogik implementieren. 🎜

Das obige ist der detaillierte Inhalt vonUmschreiben von C++-Funktionen in der Praxis: Ein Trick zum Implementieren unterklassenspezifischer Funktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage