Heim  >  Artikel  >  Backend-Entwicklung  >  Anwendungskenntnisse virtueller Funktionen und rein virtueller Funktionen in C++

Anwendungskenntnisse virtueller Funktionen und rein virtueller Funktionen in C++

WBOY
WBOYOriginal
2023-08-22 11:33:391166Durchsuche

Anwendungskenntnisse virtueller Funktionen und rein virtueller Funktionen in C++

Virtuelle Funktionen und rein virtuelle Funktionen in C++ sind häufig verwendete Werkzeuge vieler Programmierer, die objektorientierte Programmierung verwenden. Unter der Voraussetzung ihrer korrekten Verwendung können die Flexibilität und Wartbarkeit des Programms erheblich verbessert werden. In diesem Artikel werden die Anwendungsfähigkeiten virtueller Funktionen und rein virtueller Funktionen erörtert und einige praktische Entwicklungserfahrungen geteilt.

1. Virtuelle Funktion

1. Was ist eine virtuelle Funktion?

Virtuelle Funktionen sind eine Technik zur Implementierung von Polymorphismus, die es ermöglicht, die Mitgliedsfunktionen einer Klasse zur Laufzeit dynamisch zu bestimmen. Wenn eine virtuelle Funktion mithilfe eines Basisklassenzeigers oder einer Referenz aufgerufen wird, bestimmt das Programm anhand des Typs des tatsächlichen Objekts, welche Funktion aufgerufen werden soll, und erreicht so Laufzeitpolymorphismus.

2. Anwendungsszenarien virtueller Funktionen

  • Der Basisklassenzeiger oder die Referenz zeigt auf das abgeleitete Klassenobjekt und muss Polymorphismus implementieren.
  • Einige Funktionen in der Basisklasse müssen in der abgeleiteten Klasse neu definiert werden.

3. Vorsichtsmaßnahmen für die Verwendung virtueller Funktionen

  • Virtuelle Funktionen können von abgeleiteten Klassen überschrieben, aber nicht von abgeleiteten Klassen überschrieben werden.
  • Wenn eine virtuelle Funktion nicht überschrieben wird, wird die Standardimplementierung in der Basisklasse aufgerufen.
  • Konstruktionsfunktionen können nicht virtuell sein.

2. Rein virtuelle Funktion

1. Was ist eine rein virtuelle Funktion?

Eine rein virtuelle Funktion ist eine virtuelle Funktion ohne definierte Implementierung. Ihre Definitionsform ist „Funktionsname des virtuellen Funktionstyps () = 0;“, wobei die 0 nach dem Gleichheitszeichen angibt, dass die Funktion eine rein virtuelle Funktion ist. Rein virtuelle Funktionen müssen in abgeleiteten Klassen neu definiert werden, sonst kommt es zu Kompilierungsfehlern.

2. Anwendungsszenarien rein virtueller Funktionen

  • Die Basisklasse definiert eine Funktionsschnittstelle, kann jedoch keine Standardimplementierung bereitstellen.
  • Die Basisklasse hofft, die abgeleitete Klasse zur Implementierung einer bestimmten Funktion zu zwingen.

3. Vorsichtsmaßnahmen für die Verwendung rein virtueller Funktionen

  • Solange eine rein virtuelle Funktion in einer Klasse definiert ist, wird sie zu einer abstrakten Klasse und kann keine Objekte der Klasse definieren;
  • Die abgeleitete Klasse muss die rein virtuelle Funktion implementieren Funktion in der Basisklasse, andernfalls kommt es zu Kompilierungsfehlern.
  • Wenn die abgeleitete Klasse keine rein virtuelle Funktion in der Basisklasse implementiert, wird die abgeleitete Klasse auch zu einer abstrakten Klasse.

3. Anwendungskompetenzen für virtuelle Funktionen und rein virtuelle Funktionen

1. Verwenden Sie virtuelle Funktionen, um Polymorphismus zu erreichen. Virtuelle Funktionen können Polymorphismus leicht implementieren, sodass verschiedene Objekte zur Laufzeit unterschiedliche Verhaltensweisen zeigen können, was die Programmflexibilität verbessert. Hier ist ein Beispiel:

class Shape {
public:
    virtual void draw() {
        // 基类默认实现
    }
};

class Circle : public Shape {
public:
    void draw() {
        // 具体实现
    }
};

class Square : public Shape {
public:
    void draw() {
        // 具体实现
    }
};

int main() {
    Shape* p = new Circle();
    p->draw();  // 调用圆形的实现

    p = new Square();
    p->draw();  // 调用正方形的实现

    return 0;
}

Indem wir die Zeichenfunktion von Shape als virtuelle Funktion definieren, können wir den Basisklassenzeiger verwenden, um die Implementierung verschiedener abgeleiteter Klassen zur Laufzeit aufzurufen und so Polymorphismus zu erreichen.

2. Verwenden Sie reine virtuelle Funktionen, um Schnittstellen zu definieren.

Durch die Definition rein virtueller Funktionen kann die Basisklasse als Schnittstellenklasse definiert werden, wodurch die abgeleitete Klasse gezwungen wird, eine bestimmte Schnittstelle zu implementieren. Hier ist ein Beispiel:

class Interface {
public:
    virtual void func1() = 0;
    virtual int func2() = 0;
};

class Implement : public Interface {
public:
    void func1() {
        // 具体实现
    }

    int func2() {
        // 具体实现
    }
};

int main() {
    Interface* p = new Implement();

    p->func1();
    cout << p->func2() << endl;

    return 0;
}

Indem wir die Funktionen in Interface als rein virtuelle Funktionen definieren, können wir die Implement-Klasse zwingen, diese Funktionen zu implementieren, und so Interface als Schnittstellenklasse definieren.

3. Vermeiden Sie den Aufruf virtueller Funktionen in Konstruktoren und Destruktoren.

Aufrufe virtueller Funktionen werden zur Laufzeit dynamisch bestimmt, daher kann der Aufruf virtueller Funktionen in Konstruktoren und Destruktoren zu unerwarteten Ergebnissen führen. Daher müssen wir den Aufruf virtueller Funktionen in Konstruktoren und Destruktoren vermeiden.

4. Zusammenfassung

Dieser Artikel stellt die grundlegenden Konzepte und die Verwendung virtueller Funktionen und rein virtueller Funktionen in C++ vor und vermittelt einige Anwendungskenntnisse. Während des Programmentwicklungsprozesses können wir virtuelle Funktionen und rein virtuelle Funktionen entsprechend den spezifischen Anforderungen flexibel verwenden und so die Flexibilität und Wartbarkeit des Programms verbessern. Gleichzeitig muss darauf geachtet werden, den Aufruf virtueller Funktionen in Konstruktoren und Destruktoren zu vermeiden, um mögliche Fehler zu vermeiden.

Das obige ist der detaillierte Inhalt vonAnwendungskenntnisse virtueller Funktionen und rein virtueller Funktionen in C++. 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