Heim > Backend-Entwicklung > C++ > Umschreiben von C++-Funktionen: Abdeckung von Fehlern der übergeordneten Klasse und Optimierung der Codestruktur

Umschreiben von C++-Funktionen: Abdeckung von Fehlern der übergeordneten Klasse und Optimierung der Codestruktur

王林
Freigeben: 2024-05-02 10:06:01
Original
1071 Leute haben es durchsucht

Durch das Umschreiben von Funktionen können Unterklassen übergeordnete Klassenfunktionen überschreiben, wodurch Fehler in übergeordneten Klassen behoben und die Codestruktur optimiert werden. Die spezifischen Schritte sind wie folgt: Die Unterklasse schreibt die Funktion mit demselben Namen und derselben Signatur wie die übergeordnete Klasse neu und stellt ihre eigene Implementierung bereit. Unterklassen können Designfehler oder Fehler in der übergeordneten Klasse korrigieren. Umschreibfunktionen können die Wartbarkeit und Lesbarkeit Ihres Codes verbessern.

C++ 函数重写:覆盖父类缺陷,优化代码结构

C++-Funktionsumschreibung: Defekte der übergeordneten Klasse abdecken und Codestruktur optimieren

FunktionsumschreibungErmöglicht Unterklassen die Neuimplementierung von Funktionen mit demselben Namen und derselben Signatur in der übergeordneten Klasse. Dies bietet die folgenden Vorteile:

  • Abdeckung von Fehlern der übergeordneten Klasse: Unterklassen können Designfehler oder Fehler in der übergeordneten Klasse korrigieren.
  • Codestruktur optimieren: Umschreibfunktionen können die Wartbarkeit und Lesbarkeit des Codes verbessern.

Syntax

Die Syntax zum Überschreiben einer übergeordneten Klassenfunktion in einer Unterklasse lautet wie folgt:

returnType ChildClass::functionName(argumentList) {
  // 重写后的函数体
}
Nach dem Login kopieren

Unter ihnen:

  • returnType: Der Rückgabetyp der überschriebenen Funktion. returnType:重写函数的返回类型。
  • ChildClass:派生类名称。
  • functionName:要重写的函数名称。
  • argumentList:重写函数的参数列表。

实战案例:几何形状基类

考虑一个几何形状基类,它定义一个area虚拟函数来计算形状的面积:

class Shape {
public:
  virtual double area() const = 0;
};
Nach dem Login kopieren

我们创建派生类SquareCircle,分别为正方形和圆形:

class Square : public Shape {
public:
  Square(double sideLength) : sideLength(sideLength) {}
  double area() const override { return sideLength * sideLength; }
private:
  double sideLength;
};

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

覆盖父类缺陷

Shape基类的area函数是抽象的,因为它没有具体实现。子类必须提供自己的实现。但是,对于像Circle这样的圆形,父类的area函数是错误的,因为它不考虑圆周率π。

通过重写Circle类的area函数,我们可以覆盖父类缺陷并提供正确的面积计算:

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

优化代码结构

考虑另一个具有以下方法的Vector类:

class Vector {
public:
  void add(int x) { value += x; }
  void subtract(int x) { value -= x; }
};
Nach dem Login kopieren

我们可以通过重写加法运算符,

ChildClass: Abgeleiteter Klassenname.

functionName: Der Name der Funktion, die neu geschrieben werden soll.

argumentList: Schreiben Sie die Parameterliste der Funktion neu.

Praktischer Fall: Geometrieform-Basisklasse 🎜🎜🎜Stellen Sie sich eine Geometrieform-Basisklasse vor, die eine virtuelle area-Funktion definiert, um die Fläche der Form zu berechnen: 🎜
class Vector {
public:
  Vector& operator+=(int x) { value += x; return *this; }
  Vector& operator-=(int x) { value -= x; return *this; }

private:
  int value;
};
Nach dem Login kopieren
🎜Wir erstellen eine Ableitung Klasse Quadrat und Kreis, bzw. Quadrat und Kreis: 🎜
Vector v;
v += 10;  // 相当于 v.add(10)
v -= 5;   // 相当于 v.subtract(5)
Nach dem Login kopieren
🎜🎜Mängel der übergeordneten Klasse überschreiben🎜🎜🎜Form Bereich Die Funktion code> ist abstrakt, da sie keine konkrete Implementierung hat. Unterklassen müssen ihre eigene Implementierung bereitstellen. Für Kreise wie <code>Circle ist die Funktion area der übergeordneten Klasse jedoch falsch, da sie pi nicht berücksichtigt. 🎜🎜Durch Überschreiben der Funktion area der Klasse Circle können wir die Mängel der übergeordneten Klasse überschreiben und eine korrekte Flächenberechnung ermöglichen: 🎜rrreee🎜🎜Optimieren Sie die Codestruktur🎜🎜🎜 Betrachten Sie eine weitere Klasse A Vector mit den folgenden Methoden: 🎜rrreee🎜Wir können diesen Code neu gestalten, indem wir die Additionsoperatoren , überschreiben, um die Lesbarkeit und Wartbarkeit des Codes zu verbessern. Eigenschaften: 🎜 rrreee🎜Der Überschreibungsoperator ermöglicht es uns, Vektoren mit einer prägnanteren und klareren Syntax zu bedienen: 🎜rrreee🎜🎜Fazit🎜🎜🎜Funktionsüberschreibung ist ein leistungsstarker Mechanismus in C++, der es Unterklassen ermöglicht, Fehler in übergeordneten Klassen zu überschreiben und die Codestruktur zu optimieren. Indem wir den Entwurf und die Implementierung überschriebener Funktionen sorgfältig abwägen, können wir die Robustheit, Lesbarkeit und Wartbarkeit unserer Programme verbessern. 🎜

Das obige ist der detaillierte Inhalt vonUmschreiben von C++-Funktionen: Abdeckung von Fehlern der übergeordneten Klasse und Optimierung der Codestruktur. 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