Das ist Nekuromentos zweites Beispiel , das in der Art und Weise berücksichtigt wird, die ich für Objekt idiomatisch halte -orientiertes C:
Dies ist ein Beispiel für den Laufzeit-Polymorphismus, wenn die Methode aufgelöst wird.
C1x hat generische Auswahlen hinzugefügt, die Kompilierungszeit-Polymorphismus über Makros ermöglichen. Das folgende Beispiel stammt aus dem C1x April Entwurf, Abschnitt 6.5.1.1 §5:
%Vor% Typ-generische Makros für mathematische Funktionen waren bereits in C99 über den Header tgmath.h
verfügbar, aber es gab keine Möglichkeit für Benutzer, ihre eigenen Makros ohne Verwendung von Compiler-Erweiterungen zu definieren.
Fast alle Implementierungen von Laufzeitpolymorphismen in C verwenden Funktionszeiger, also ist dies der Grundbaustein.
Hier ist ein einfaches Beispiel, in dem sich das Ablaufverhalten der Prozedur abhängig von ihrem Argument ändert.
%Vor%Mit Funktionszeigern können Sie virtuelle Tabellen erstellen und daraus "Objekte" erstellen, die einheitlich behandelt werden, aber Verhalten zur Laufzeit anders.
%Vor%Es gibt keine intrinsische Unterstützung für Polymorphie in C, aber es gibt Entwurfsmuster, die Funktionszeiger, Basisklassen (Struktur) -Umsetzungen usw. verwenden, die ein logisches Äquivalent zum dynamischen Versand bereitstellen können. Die GTK-Bibliothek ist ein gutes Beispiel dafür.
Ich schätze, Sie haben bereits einen Wikipedia-Artikel über Polymorphismus überprüft.
In der Informatik ist Polymorphismus eine Programmiersprache Dies ermöglicht die Verarbeitung von Werten verschiedener Datentypen mit a einheitliche Schnittstelle.
Nach dieser Definition unterstützt C nicht nativ Polymorphismus. Zum Beispiel gibt es keine allgemeine Funktion zum Erfassen des absoluten Werts einer Zahl ( abs
und fabs
sind jeweils für Ganzzahlen und Doppel).
Wenn Sie auch mit C ++ vertraut sind, werfen Sie einen Blick auf OOP-Vererbung und Templates - das sind Mechanismen für Polymorphie.
Sehen Sie sich dieses pdf an: Objektorientierte Programmierung mit ANSI-C
Tags und Links c oop polymorphism