Heim >Backend-Entwicklung >C++ >Erforschung des Polymorphismus in C++

Erforschung des Polymorphismus in C++

WBOY
WBOYOriginal
2023-08-21 22:21:231377Durchsuche

C++ ist eine Sprache, die objektorientierte Programmierung unterstützt, und ein Hauptmerkmal der objektorientierten Programmierung ist Polymorphismus. Polymorphismus bezieht sich auf das unterschiedliche Verhalten, das verschiedene Objekte bei der Ausführung derselben Operation hervorrufen. In C++ wird Polymorphismus durch Funktionsüberladung und die Verwendung virtueller Funktionen erreicht. Im Folgenden wird der Polymorphismus in C++ untersucht, um den Lesern zu helfen, dieses Konzept besser zu verstehen.

1. Überladung von Funktionen

Überladung von Funktionen bedeutet, dass mehrere Funktionen mit demselben Namen im selben Bereich definiert sind, ihre Parametertypen, Anzahl der Parameter oder Rückgabewerttypen jedoch unterschiedlich sind. Auf diese Weise entscheidet der Compiler beim Aufruf der Funktion automatisch, die entsprechende Funktion basierend auf den übergebenen Parametern aufzurufen. Zum Beispiel:

void print(int a){
    cout<<"int: "<<a<<endl;
}

void print(double b){
    cout<<"double: "<<b<<endl;
}

int main(){
    print(10); //调用print(int a)函数
    print(3.14); //调用print(double b)函数
    return 0;
}

Die Funktion print ist überladen und für Parameter vom Typ „int“ bzw. „double“ definiert. Wenn die Druckfunktion in der Hauptfunktion aufgerufen wird, wählt der Compiler die entsprechende aufzurufende Funktion basierend auf dem Typ der übergebenen Parameter aus. Dies ist ein Beispiel für Polymorphismus, der durch Funktionsüberladung erreicht wird.

2. Virtuelle Funktion

Virtuelle Funktionen sind in der übergeordneten Klasse definierte Funktionen, die von Unterklassen überschrieben werden können. Definieren Sie die Funktion als virtuellen Typ in der Basisklasse. Wenn die Unterklasse die Funktion erbt, müssen sie auch als virtuelle Funktion definiert werden. Der Funktionsname und die Parameter müssen genau gleich sein. Zur Laufzeit werden virtuelle Funktionen dynamisch an den tatsächlich ausgeführten Objekttyp gebunden, um Polymorphismus zu erreichen. Zum Beispiel:

class Shape{
public:
    virtual void area(){ //定义虚函数area
        cout<<"This is a shape"<<endl;
    }
};

class Circle:public Shape{
public:
    void area(){//重写虚函数area
        cout<<"This is a circle"<<endl;
    }
};

class Rectangle:public Shape{
public:
    void area(){//重写虚函数area
        cout<<"This is a rectangle"<<endl;
    }
};

int main(){
    Shape *shape;
    Circle circle;
    Rectangle rectangle;
    shape = &circle;
    shape->area();//调用circle类中的虚函数area
    shape = &rectangle;
    shape->area();//调用rectangle类中的虚函数area
    return 0;
}

Im obigen Code ist eine Shape-Klasse definiert, die einen virtuellen Funktionsbereich enthält. Die Klassen „Circle“ und „Rechteck“ erben die Klasse „Shape“ und schreiben den virtuellen Funktionsbereich darin neu. In der Hauptfunktion wird ein Zeiger auf den Shape-Typ definiert, den Adressen des Circle-Objekts und des Rechteck-Objekts zugewiesen und jeweils die Bereichsfunktionen aufgerufen. Da es sich bei der Flächenfunktion um eine virtuelle Funktion handelt und sie dynamisch an den Typ des tatsächlich laufenden Objekts gebunden ist, lauten die Ausgabeergebnisse „Dies ist ein Kreis“ bzw. „Dies ist ein Rechteck“. Dies ist ein Beispiel für virtuelle Funktionen, die Polymorphismus implementieren.

3. Reine virtuelle Funktion

Eine reine virtuelle Funktion bedeutet, dass der Funktionskörper der virtuellen Funktion leer ist und Unterklassen die Funktion neu schreiben müssen, um die Klasse zu erben. Wenn eine Basisklasse rein virtuelle Funktionen enthält, wird die Klasse als abstrakte Klasse bezeichnet. Beispiel:

class Shape{
public:
    virtual void area() = 0;//定义纯虚函数area
};

class Circle:public Shape{
public:
    void area(){
        cout<<"This is a circle"<<endl;
    }
};

class Rectangle:public Shape{
public:
    void area(){
        cout<<"This is a rectangle"<<endl;
    }
};

int main(){
    Shape *shape;
    Circle circle;
    Rectangle rectangle;
    shape = &circle;
    shape->area();//调用circle类中的虚函数area
    shape = &rectangle;
    shape->area();//调用rectangle类中的虚函数area
    return 0;
}

Im obigen Code ist der rein virtuelle Funktionsbereich in der Shape-Klasse definiert. Die Klassen Circle und Rechteck müssen diese Funktion erben, um die Shape-Klasse zu erben, andernfalls wird ein Kompilierungsfehler gemeldet. In der Hauptfunktion wird Polymorphismus dadurch erreicht, dass Zeiger auf Kreis- und Rechteckobjekte zeigen.

Zusammenfassung:

Es ist ersichtlich, dass es viele Möglichkeiten gibt, Polymorphismus in C++ zu implementieren, wobei Funktionsüberladung und virtuelle Funktionen die beiden am häufigsten verwendeten Methoden sind. Durch die Implementierung von Polymorphismus können die Flexibilität und Wiederverwendbarkeit des Codes erheblich verbessert werden, außerdem kann der Code einfacher zu lesen und zu warten sein. Beim eigentlichen Programmieren sollten Sie sich darauf konzentrieren, die Natur und Verwendungsmöglichkeiten des Polymorphismus zu verstehen und die Methoden und Techniken des Polymorphismus zu beherrschen, um Ihre Programmierfähigkeiten zu stärken.

Das obige ist der detaillierte Inhalt vonErforschung des Polymorphismus 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