Polymorphismus (in C) [duplizieren]

8

Ich versuche, die Idee des Polymorphismus mit Beispielen aus Sprachen, die ich kenne, besser zu verstehen; Gibt es Polymorphismus in C?

    
Belgi 19.11.2011, 13:09
quelle

5 Antworten

28

Das ist Nekuromentos zweites Beispiel , das in der Art und Weise berücksichtigt wird, die ich für Objekt idiomatisch halte -orientiertes C:

animal.h

%Vor%

cat.c

%Vor%

dog.c

%Vor%

main.c

%Vor%

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.

    
Christoph 19.11.2011, 14:22
quelle
9

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%     
Nekuromento 19.11.2011 13:41
quelle
3

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.

    
Brett Hale 19.11.2011 13:21
quelle
1

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.

    
aztek 19.11.2011 13:35
quelle
0

Sehen Sie sich dieses pdf an: Objektorientierte Programmierung mit ANSI-C

    
Adam Trhon 19.11.2011 13:39
quelle

Tags und Links