C Vererbung mit Unionen

8

Ich habe irgendwo gelesen, wie einige objektorientierte Funktionen in C implementiert werden können, und es hat sich als ziemlich nützlich erwiesen. Im Speziellen spielte ich mit der Idee der Vererbung. Hier ist ein Beispiel:

%Vor%

Das ist einfach, aber es erlaubt etwas hinterhältiges. Ein Zeiger auf eine Entity ist ebenfalls ein Zeiger auf einen Circle, da das erste Element einer Entity immer ein Circle ist. Mit dieser Idee können wir die folgende Funktion aufbauen:

%Vor%

Und nenne es so:

%Vor%

Das ist wunderbar, aber ich stieß auf ein Problem. Was, wenn ich wollte, dass einige meiner Entitäten Rechtecke sind? Ich habe eine Lösung, aber ich möchte die Bestätigung, dass es immer funktioniert, egal, der Compiler. Mein Wissen über Gewerkschaften ist sehr begrenzt.

%Vor%

Ist es jetzt völlig sicher anzunehmen, dass das erste Element eines Entity abhängig von seiner Initialisierung entweder ein Rectangle oder ein Circle ist? Könnte es außerdem in irgendeiner der drei oben beschriebenen Funktionen verwendet werden? Bonuspunkte für relevante Angebote aus dem Standard. Um es ganz klar zu sagen, ich möchte das tun:

%Vor%     
BrainSteel 29.12.2013, 00:37
quelle

2 Antworten

4
  

Ist es jetzt völlig sicher anzunehmen, dass das erste Element einer Entity entweder ein Rectangle oder ein Circle ist, abhängig von seiner Initialisierung?

Ja.

  

Bonuspunkte für relevante Zitate aus dem Standard.

  • "Ein Union-Typ beschreibt eine überlappende, nicht leere Gruppe von Member-Objekten, von denen jedes einen optional angegebenen Namen und möglicherweise einen anderen Typ hat." (C99, 6.2.5.20)

  • "Ein Zeiger auf ein Union-Objekt, das entsprechend konvertiert wird, zeigt auf jedes seiner Mitglieder (oder wenn ein Mitglied ein Bit-Feld ist, dann auf die Einheit, in der es sich befindet) und umgekehrt." (6.7.2.1.14)

user529758 29.12.2013, 00:44
quelle
4

A union ist unabhängig von seinem aktiven Feld immer auf die gleiche Speicheradresse ausgerichtet. Betrachten Sie beispielsweise Folgendes:

%Vor%

Ausgabe an meinem Rechner:

%Vor%     
Fiddling Bits 29.12.2013 00:46
quelle

Tags und Links