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++-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
基类,表示一个通用形状。派生类 Circle
和 Rectangle
分别表示圆形和矩形。我们需要计算这些形状的面积。
基类 Shape
class Shape { public: virtual double area() const = 0; // 纯虚函数 };
派生类 Circle
class Circle : public Shape { public: Circle(double radius) : radius(radius) {} double area() const override { return M_PI * radius * radius; } private: double radius; };
派生类 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; };
使用
我们可以使用这些类来计算不同形状的面积:
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; }
输出:
Area of circle: 78.5398 Area of rectangle: 12.0
在这个示例中,Circle
和 Rectangle
类重写了 Shape
类中定义的 area()
rrreee
Circle
und Rectangle
die im Shape
definierte 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!