Heim  >  Artikel  >  Backend-Entwicklung  >  Virtuelle C++-Funktionen und abstrakte Basisklassen: Erkundung der Grundlagen der polymorphen Programmierung

Virtuelle C++-Funktionen und abstrakte Basisklassen: Erkundung der Grundlagen der polymorphen Programmierung

WBOY
WBOYOriginal
2024-04-28 11:30:02397Durchsuche

In C++ wird Polymorphismus durch virtuelle Funktionen und abstrakte Basisklassen erreicht. Virtuelle Funktionen ermöglichen das Überschreiben von Basisklassenfunktionen in abgeleiteten Klassen, während abstrakte Basisklassen rein virtuelle Funktionen enthalten, wodurch abgeleitete Klassen gezwungen werden, Implementierungen bereitzustellen. Dies ermöglicht eine polymorphe Programmierung, indem ein Basisklassenzeiger verwendet wird, um auf ein abgeleitetes Klassenobjekt zuzugreifen und die entsprechende Methode basierend auf dem tatsächlichen Typ des Objekts aufzurufen.

C++ 虚拟函数与抽象基类:探究多态编程的基础

Virtuelle C++-Funktionen und abstrakte Basisklassen: Die Grundlagen der polymorphen Programmierung

Übersicht

Polymorphismus ist ein Schlüsselkonzept in der objektorientierten Programmierung (OOP), das es Objekten ermöglicht, auf dieselbe Nachricht auf unterschiedliche Weise zu reagieren. In C++ verwenden wir virtuelle Funktionen und abstrakte Basisklassen, um Polymorphismus zu erreichen.

Virtuelle Funktion

Definition: Eine virtuelle Funktion ist eine Mitgliedsfunktion, die in einer Basisklasse deklariert, aber nur in einer abgeleiteten Klasse implementiert ist. Wenn eine virtuelle Funktion über einen Basisklassenzeiger aufgerufen wird, wird die Implementierung der abgeleiteten Klasse aufgerufen.

Syntax:

class Base {
public:
    virtual void print() const;
};

class Derived : public Base {
public:
    virtual void print() const override;
};

Das Schlüsselwort override gibt an, dass wir die virtuelle Funktion der Basisklasse überschreiben. override 关键字表明我们正在覆盖基类的虚拟函数。

抽象基类

定义:抽象基类是至少包含一个纯虚函数的基类。纯虚函数没有定义,仅由派生类实现。

语法:

class Base {
public:
    virtual void f() const = 0;
};

实战案例:形状类层次

考虑一个形状层次结构,其中每个形状类都具有计算其面积的 area()

Abstrakte Basisklasse

Definition:

Eine abstrakte Basisklasse ist eine Basisklasse, die mindestens eine rein virtuelle Funktion enthält. Rein virtuelle Funktionen sind nicht definiert und werden nur durch abgeleitete Klassen implementiert.

Syntax:

class Shape {
public:
    virtual double area() const = 0;
};
Praktisches Beispiel: Formklassenhierarchie

Stellen Sie sich eine Formhierarchie vor, in der jede Formklasse über eine area()-Methode verfügt, die ihre Fläche berechnet.

Basisklasse Form:

    class Circle : public Shape {
    public:
        Circle(double radius) : _radius(radius) {}
    
        double area() const override {
            return M_PI * _radius * _radius;
        }
    
    private:
        double _radius;
    };
    
    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;
    };
  • Abgeleitete Klassen Kreis und Rechteck:
  • int main() {
        Shape* s1 = new Circle(5);
        Shape* s2 = new Rectangle(3, 4);
    
        std::cout << "Circle area: " << s1->area() << std::endl;
        std::cout << "Rectangle area: " << s2->area() << std::endl;
    
        return 0;
    }
  • Hauptfunktion:
🎜
Circle area: 78.5398
Rectangle area: 12
🎜Ausgabe: 🎜rrreee🎜Vorteile🎜🎜🎜Alle Bietet polymorphen Zugriff auf abgeleitete Klassenobjekte. 🎜🎜 Code verbessern Wiederverwendbarkeit und Skalierbarkeit🎜🎜Unterstützung der Code-Entkopplung und Wartung🎜🎜

Das obige ist der detaillierte Inhalt vonVirtuelle C++-Funktionen und abstrakte Basisklassen: Erkundung der Grundlagen der polymorphen Programmierung. 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