Heim >Backend-Entwicklung >C++ >Unterstützen STL-Funktionsobjekte Polymorphismus? Wie erreichen?

Unterstützen STL-Funktionsobjekte Polymorphismus? Wie erreichen?

王林
王林Original
2024-04-25 10:39:01766Durchsuche

STL-Funktionsobjekte unterstützen Polymorphismus, der wie folgt implementiert wird: Verwenden Sie virtuelle Funktionen und virtuelle Vererbung, um abstrakte Basisklassen und ihre abgeleiteten Klassen zu definieren. Definieren Sie spezifische Funktionsversionen für jede abgeleitete Klasse. Übergeben Sie konkrete Klassen als Parameter an den Algorithmus.

STL 函数对象是否支持多态性?如何实现?

Unterstützen STL-Funktionsobjekte Polymorphismus?

Funktionsobjekte in der Standard Template Library (STL) unterstützen Laufzeitpolymorphismus und ermöglichen eine dynamische Bestimmung, welche Funktion während der Programmausführung aufgerufen werden soll.

Implementierungsmethode:

Durch die Verwendung virtueller Funktionen und virtueller Vererbung können polymorphe Funktionsobjekte implementiert werden.

Codebeispiel:

Betrachten Sie das folgende Beispiel, in dem eine abstrakte Basisklasse Shape mit einer rein virtuellen Funktion area() definiert wird: Shape,具有一个纯虚函数 area()

struct Shape {
  virtual double area() const = 0;
};

派生自 Shape 的具体类,例如 CircleSquare,定义了其特定版本的 area() 函数:

struct Circle : public Shape {
  double radius;

  Circle(double radius) : radius(radius) {}

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

struct Square : public Shape {
  double side_length;

  Square(double side_length) : side_length(side_length) {}

  double area() const override {
    return side_length * side_length;
  }
};

可以使用函数对象将这些具体类作为参数传递给算法:

std::vector<Shape*> shapes{new Circle(2), new Square(3)};

double total_area = 0;
for (const auto& shape : shapes) {
  total_area += shape->area();
}

std::cout << "Total area: " << total_area << std::endl;

在这个示例中,即使 shapes 存储的是不同的 Shape 派生类的指针,多态函数对象也会调用正确的 area()rrreee

ist abgeleitet von Konkrete Klassen von Shape, wie zum Beispiel Circle und Square, definieren ihre spezifischen Versionen der Funktion area():

rrreeeSie können Funktionsobjekte verwenden, um diese konkreten Klassen als Argumente an Algorithmen zu übergeben: rrreee

In diesem Beispiel speichert shape zwar einen Zeiger auf eine andere abgeleitete Shape class ruft das polymorphe Funktionsobjekt auch die richtige Funktion area() auf.

    Praktischer Fall:
  • Polymorphe Funktionsobjekte sind sehr nützlich bei dynamischer Planung und lose gekoppeltem Code, wie zum Beispiel:
🎜In der Grafikbibliothek können Formklassen verschiedene Arten von Grafiken darstellen. Polymorphe Funktionsobjekte ermöglichen das Zeichnen und Berechnen von Flächen, ohne den Grafikcode zu ändern. 🎜🎜In Datenbankanwendungen können Verbindungsklassen verschiedene Arten von Datenbankverbindungen abstrahieren. Polymorphe Funktionsobjekte ermöglichen die transparente Durchführung von Abfragen und Aktualisierungen. 🎜🎜

Das obige ist der detaillierte Inhalt vonUnterstützen STL-Funktionsobjekte Polymorphismus? Wie erreichen?. 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