Heim  >  Artikel  >  Backend-Entwicklung  >  Überladen und Umschreiben von C++-Funktionen sowie Entwurfsprinzipien der Klassenhierarchie

Überladen und Umschreiben von C++-Funktionen sowie Entwurfsprinzipien der Klassenhierarchie

王林
王林Original
2024-04-20 08:03:01966Durchsuche

Einführung in das Überladen und Umschreiben von Funktionen Das Überladen und Umschreiben von Funktionen in C++ ermöglicht es einer Funktion mit demselben Namen, eine andere Parameterliste zu haben oder eine Funktion mit demselben Namen in einer Basisklasse zu überschreiben, um flexibleren und erweiterbareren Code zu erhalten und dabei wichtigen Prinzipien zu folgen wie SRP, LSP, DIP).

C++ 函数重载和重写与类层次结构的设计原则

C++-Funktionsüberladung, Umschreiben und Gestaltungsprinzipien der Klassenhierarchie

Einführung

Funktionsüberladung und Umschreiben in C++ sind zwei Grundkonzepte, die für das Verständnis und den Entwurf klassenbasierter Programme von entscheidender Bedeutung sind. Durch Funktionsüberladung kann eine Funktion mit demselben Namen eine andere Parameterliste haben, während durch Funktionsüberschreibung eine Funktion in einer abgeleiteten Klasse eine Funktion mit demselben Namen in einer Basisklasse überschreiben kann. Diese Konzepte sind wichtig für die Erstellung einer flexiblen und skalierbaren Codebasis.

Funktionsüberladung

Funktionsüberladung ermöglicht die Erstellung von Funktionen mit demselben Namen, die jedoch unterschiedliche Parameterlisten akzeptieren. Dies ist nützlich, um verschiedene Arten und Mengen von Eingaben zu verarbeiten. Beispielsweise kann die folgende Funktion erstellt werden, um zwei int oder zwei double hinzuzufügen: int 或两个 double

int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; }

当编译器看到 add 函数调用时,它将匹配最合适的重载版本。

函数重写

函数重写允许派生类中的函数覆盖基类中的同名函数。这用于在子类中修改或扩展基类行为。例如,以下基类和派生类重新定义了 print 函数:

class Base {
public:
    void print() { cout << "Base" << endl; }
};

class Derived : public Base {
public:
    void print() { cout << "Derived" << endl; }
};

当调用派生类中的 print 函数时,它将覆盖基类中的同名函数,从而打印 "Derived"

类层次结构设计原则

在设计类层次结构时,以下原则非常重要:

  • Liskov 替换原则(LSP):子类应该随时可以替换其基类而不改变程序行为。
  • 依赖倒置原则(DIP):高层模块不应该依赖低层模块,它们应该依赖抽象。
  • 单一职责原则(SRP):每个类应该负责一个单一的职责。

函数重载和重写对于遵循这些原则至关重要。

实战案例

考虑一个图形应用程序,它需要处理不同形状的对象。可以使用基类 Shape 来表示所有形状,并使用派生类(如 RectangleCircle

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

class Rectangle : public Shape {
public:
    Rectangle(double width, double height) : width(width), height(height) {}
    virtual double area() override { return width * height; }
private:
    double width, height;
};

class Circle : public Shape {
public:
    Circle(double radius) : radius(radius) {}
    virtual double area() override { return 3.14 * radius * radius; }
private:
    double radius;
};

Wenn der Compiler den Funktionsaufruf add sieht, Es entspricht der am besten geeigneten überladenen Version.

Funktionsüberschreibung

Funktionsüberschreibung ermöglicht einer Funktion in einer abgeleiteten Klasse, eine gleichnamige Funktion in einer Basisklasse zu überschreiben. Dies wird verwendet, um das Verhalten der Basisklasse in Unterklassen zu ändern oder zu erweitern. Beispielsweise definieren die folgenden Basis- und abgeleiteten Klassen die Funktion print neu:

rrreee

Wenn die Funktion print in der abgeleiteten Klasse aufgerufen wird, überschreibt sie deren Funktion name in der Basisklasse und gibt somit "Derived" aus. 🎜🎜🎜Grundsätze für den Entwurf einer Klassenhierarchie🎜🎜🎜Beim Entwurf einer Klassenhierarchie sind die folgenden Grundsätze sehr wichtig: 🎜
  • 🎜 Liskov-Substitutionsprinzip (LSP): 🎜Eine Unterklasse sollte immer in der Lage sein, ihre Basisklasse zu ersetzen ohne Programmverhalten ändern.
  • 🎜Abhängigkeitsinversionsprinzip (DIP): 🎜Module auf hoher Ebene sollten nicht von Modulen auf niedriger Ebene abhängen, sondern auf Abstraktionen.
  • 🎜Single-Responsibility-Prinzip (SRP): 🎜Jede Klasse sollte für eine einzelne Verantwortung verantwortlich sein.
🎜Funktionsüberladung und Umschreiben sind für die Einhaltung dieser Prinzipien von entscheidender Bedeutung. 🎜🎜🎜Praktischer Fall🎜🎜🎜Stellen Sie sich eine Grafikanwendung vor, die Objekte unterschiedlicher Form verarbeiten muss. Sie können die Basisklasse Shape verwenden, um alle Formen darzustellen, und abgeleitete Klassen wie Rectangle und Circle, um bestimmte Formen darzustellen. 🎜rrreee🎜 Berechnen Sie die Fläche verschiedener Formen einfach mit der Funktion „Rewrite“. Durch die Befolgung der SRP-Prinzipien definiert jede Klasse ihre spezifischen Verantwortlichkeiten. 🎜🎜🎜Fazit🎜🎜🎜Funktionsüberladung und Umschreiben sind leistungsstarke Konzepte in C++ und für die Gestaltung flexiblen und skalierbaren Codes von entscheidender Bedeutung. Die Einhaltung der Designprinzipien der Klassenhierarchie stellt die Erstellung robuster und wartbarer Software sicher. 🎜

Das obige ist der detaillierte Inhalt vonÜberladen und Umschreiben von C++-Funktionen sowie Entwurfsprinzipien der Klassenhierarchie. 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