Das Wesen des Polymorphismus und die grundlegende Verwendung virtueller Funktionen

Beispiele sind wie folgt:

#include <iostream>
using namespace std;

class Father {
    
    
public:
	void play() {
    
    
		cout << "到KTV唱歌..." << endl;
	}
};

class Son :public Father {
    
    
public:
	void play() {
    
    
		cout << "一起打王者吧!" << endl;
	}
};

void party(Father **men, int n) {
    
    
	for (int i = 0; i<n; i++) {
    
    
		men[i]->play();
	}
}
int main(void) {
    
    
	Father father;
	Son son1, son2;
	Father* men[] = {
    
     &father, &son1, &son2 };

	party(men, sizeof(men) / sizeof(men[0]));

	system("pause");
	return 0;
}

Die Ausgabe ist:
Fügen Sie hier eine Bildbeschreibung ein

Im obigen Beispiel enthält der übergeordnete Klassenzeiger den untergeordneten Klassenzeiger. Wenn der untergeordnete Klassenzeiger die Methode in der untergeordneten Klasse aufruft, schlägt er fehl. Anstatt die Methode in der untergeordneten Klasse aufzurufen, ruft er die gleichnamige Methode in der übergeordneten Klasse auf!

Wie kann dieses Problem gelöst werden?
Die Verwendung einer virtuellen Funktion kann dieses Problem lösen:

class Father {
    
    
public:
	virtual void play() {
    
    
		cout << "到KTV唱歌..." << endl;
	}
};

Die Ausgabe ist:
Fügen Sie hier eine Bildbeschreibung ein

Das ist Polymorphismus! Daraus lässt sich erkennen, dass das Wesen des Polymorphismus darin besteht:
Formal wird ein einheitlicher übergeordneter Klassenzeiger für die allgemeine Verarbeitung verwendet,
in der tatsächlichen Ausführung kann dieser Zeiger jedoch auf ein Unterklassenobjekt verweisen.
Formal wird ursprünglich die Methode der übergeordneten Klasse aufgerufen, tatsächlich wird jedoch die gleichnamige Methode der Unterklasse aufgerufen.

[Hinweis]:
Wenn das Programm ausgeführt wird und der Zeiger der übergeordneten Klasse auf das Objekt der übergeordneten Klasse oder das Objekt der Unterklasse zeigt, ist die Form nicht zu unterscheiden!
Nur durch den polymorphen Mechanismus kann die entsprechende Methode ausgeführt werden.

Die grundlegende Verwendung virtueller Funktionen:
Definition virtueller Funktionen:
Verwenden Sie Virtual vor dem Rückgabetyp der Funktion,
fügen Sie Virtual nur zur Deklaration der Mitgliedsfunktion hinzu und fügen Sie Virtual nicht zur Implementierung der Mitgliedsfunktion hinzu

Vererbung virtueller Funktionen:
 Wenn eine Mitgliedsfunktion als virtuelle Funktion deklariert wird, ist ihre Unterklasse [abgeleitete Klasse] und die Unterklasse der Unterklasse, die geerbte Mitgliedsfunktion, automatisch auch eine virtuelle Funktion.
Wenn Sie diese virtuelle Funktion in der Unterklasse neu schreiben, müssen Sie nicht virtuell schreiben, es wird jedoch dennoch empfohlen, virtuell zu schreiben, was besser lesbar ist!

Supongo que te gusta

Origin blog.csdn.net/weixin_46060711/article/details/124458506
Recomendado
Clasificación