Einführung in Typdefinitionen in C++ im Rahmen der Lehre des Programmierens. [] (C++, Typdefinition, enum), Lektion, Seite 721233
https://www.purl.org/stefan_ram/pub/c++_typdefinition_de (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram

Typdefinitionen in C++

Ein Datentyp ist

So gibt es in C++  beispielsweise den Datentyp "bool" mit dem Wert "true" und dem Wert "false". Für diese Werte ist die Darstellung 1 bzw. 0 festgelegt. Es gibt verschiedene Operationen für diesen Datentyp, wie etwa die Möglichkeit der Ausgabe.

Nun kann ein C++ -Programm auch neue Datentypen definieren. Das kann durch eine Aufzählung der Namen der Werte des Datentyps geschehen. C++  weist dann automatisch eine Repräsentation durch aufsteigende Zahlen ab 0 zu.

Soll eine Lichtzeichensignalanlage durch ein Programm gesteuert oder simuliert werden, dann kann es beispielsweise sinnvoll sein, einen Datentyp für die verschiedenen möglichen Zustände eines Signals einzuführen. Dies kann geschehen, indem nach dem Schlüsselwort "enum" der Name des neuen Datentyps angegeben wird, dem dann in geschweiften Klammern die kommagetrennten Wertnamen folgen.

Die Wertnamen müssen nicht großgeschrieben werden, dies wird aber empfohlen, da es sich eingebürgert hat.

enum.cpp
#include <iostream> 
#include <ostream>
enum ampelzustand { ROT, ROTGELB, GRUEN, GELB };
int main() 
{ ampelzustand ampel( ROT );  
std::cout << ampel << ROTGELB << '\n'; }

std::cout
01

Dem hier definierten Datentyp fehlt aber noch einige Unterstützung, so etwa die Möglichkeit zum Weiterschalten des Zustandes oder zur Ausgabe der Werte anhand ihrer Wertnamen. Derzeit wird zur Ausgabe noch die zugrundeliegende Repräsentation der Werte durch Ganzzahlen verwendet.

Typsicherheit

Eine Umgebung unterstützt Typsicherheit, in dem sie Fehler aufgrund des Typs von Ausdrücken diagnostiziert. Das folgende Programm definiert einen Datentyp für Ampelzustände und einen Datentyp für Antworten. Eine Initialisierung eines Objektes des einen Typs mit einem Wert des anderen Typs wird als Fehler erkannt. Diese Typsicherheit hilft dem Programmierer bei der Entdeckung solcher Fehler.

safe.cpp
#include <iostream> 
#include <ostream>
enum ampelzustand { ROT, ROTGELB, GRUEN, GELB }; 
enum antwort { JA, NEIN, VIELLEICHT };
int main() 
{ ampelzustand ampel( NEIN ); }

Diagnosen
"safe.cpp", line 6: error: a value of type "antwort" cannot be used to 
initialize an entity of type "ampelzustand" 
{ ampelzustand ampel( NEIN ); } 
^

Operatorüberladungen in C++

Operatoren der Sprache C++  können für benutzerdefinierten Datentypen definiert werden. Dadurch wird der Operator überladen. Seine Bedeutung für die Datentypen der Programmiersprache wird nicht verändert.

In dem folgenden Beispiel wird ein Datentyp "zustand" definiert, dessen Werte die möglichen Zustände eines Lichtsignals sind.

Die Addition einer Zahl zu einem Ampelzustand soll bedeuten, daß der Ampelzustand um so viele Schritte weitergezählt wird, wie die Zahl angibt. Nach dem Zustand "GELB" soll wieder der Zustand "ROT" kommen.

Zunächst werden der Zahlenwert des Zustandes und die Zahl addiert. Das Ergebnis kann allerdings außerhalb des Bereichs von 0 bis 3 liegen. Die folgenden drei Zeilen berechnen daher den Rest der Division der Summe durch die Zahl der Zustände. Dies hat den gewünschten Effekt. (Die Berechnung des Restes kann man in C++ noch einfacher machen, die dafür notwendigen Sprachelemente wurden aber bisher noch nicht behandelt.)

In der Funktion "main" wird dann die Summe aus einem Zustand und einer Zahl berechnet. Da der Operator "+" für diesen Fall überladen wurde, wird dann die für diesen Fall soeben definierte Funktion aufgerufen.

operator.cpp
#include <iostream> 
#include <ostream>
enum zustand { ROT, ROTGELB, GRUEN, GELB };
zustand operator+( const zustand l, int const i ) 
{ int const top( static_cast<int>( GELB ) + 1 ); 
double const summe( static_cast<int>( l )+ i ); 
double const quotient( summe / top ); 
double const frac( quotient - static_cast<int>( quotient )); 
int const rest( frac * top + 0.5 ); 
return static_cast<zustand>( rest ); }
int main() 
{ zustand x( ROT ); std::cout << x; 
x = x + 1; std::cout << x;  
x = x + 1; std::cout << x;  
x = x + 1; std::cout << x;  
x = x + 1; std::cout << x;  
x = x + 1; std::cout << x;  
x = x + 1; std::cout << x; std::cout << '\n'; }

std::cout
0123012

Übungsfrage Warum läuft das Programm ohne Ende, wenn in der Operatordefinition das erste "static_cast<int>" weggelassen wird?

Übungsaufgabe Die definierte Überladung für den Operator "+" ist nicht kommutativ. Der Ausdruck "x + 1" hat eine andere Bedeutung als "1 + x". Ändern Sie das obige Beispielprogramm so ab, daß der Operator "+" der Addition einer Zahl zu einem Ampelzustand kommutativ ist.


Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. L'autore di questo testo è Stefan Ram. Tutti i diritti riservati. Questo sito è pubblicato da Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram721233 stefan_ram:721233 C++, Typdefinition, enum kostenlos, kostenlose, kostenloses, kosten los, kosten lose, kosten loses, gratis, free, frei, freie, freies, privat, private, privates, homepage, home-page, home page, website, web site, webpage, web-page, web page, webpages, web-pages, web pages, webseite, Web-Seite, Webseite, Webseiten, Web-Artikel, Web Artikel, online, on-line, on line, download downloaden, down load, or, deutsch, deutsche, deutsches, deutscher, Deutschland, deutschsprachig, deutschsprachige, deutschsprachiges, german, germany, and, uebersicht, Uerbersicht, uebersichten, Uebersichten, Übersicht, übersicht, Übersichten, übersichten, Uebersicht, uebersicht, Uebersichten, uebersichten, Info, Infos zu, Information über, ueber, Informationen über, Auskunft, Auskünfte, Auskuenfte, Dienst, PbclevtugFgrsnaEnz, Angebot, Angebote, Anbieter, server, für, fuer, in, an, keyword, keywords, key word, keywords, internet, internets, net, network, net work, networks, net works, web, www, world wide web, Theorie, Praxis, Anwendung, DV, IT, glossar, fachwörterbuch it-glossar, computer lexikon, Computerlexikon, Computer-Lexikon, Lexikon, computer lexicon, Computerlexicon, Computer-Lexicon, Lexicon, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 was ist ein, was ist das, was sind, definiere, definition, define, Inhalt, html, xhtml, free im netz, PDF Text, digital, digitale, binär, binäre, elektronisch, elektronische, fachbegriff, fachbegriffe, konzept, Begriff, allgemein, allgemeine, allgemeines, Technik, Datentechnik, Digitaltechnik, Binätechnik, online lesen; , Einführung, Einfuehrung, Einführungen, Einfuehrungen, eLearning-Modul, e-Learning-Modul, eLearning-Module, e-Learning-Module, Kurs Berlin, Kurse Berlin, Kursus, Vortrag, Vorträge, Vortraege, Lehrgang, Lehrgänge, Lehrgaenge, kostenloses Lehrmaterial, kostenlose Lehrmaterialien, Vorlesung, Vorlesungen, Unterrichtseinheit, Unterrichtseinheiten, kostenloses Unterrichtsmaterial im Internet, kostenlose Unterrichtsmaterialien im Internet, Ausbildung, Ausbildungen, für die Ausbildung, Fortbildung, Fortbildungen, Weiterbildung, Weiterbildungen, Schulung Berlin, Schulungen Berlin, Internetschulung, Webschulung, Kursunterlage, Kursunterlagen, trainer Berlin, Didaktik, Informatikunterricht, Primer, Skript FH, Skripte FH, Skriptum FH, Skripts FH, Script FH, Scripte FH, Scriptum FH, Scripts FH, howto, how-to, how to, Lehrbuch, Buch, Bücher, Buecher, Bericht, Crash Kurs Berlin, Crash-Kurs Berlin, Crashkurs Berlin, Report, Sachtext, Sachtexte, Übung, Übungen, Uebung, Uebungen, course, PbclevtugFgrsnaEnz, lecture note, lecture notes, Tutorial, Tutor, Tutorium, Teacher, Lehrer Berlin, Trainer Berlin, Beratung Berlin, Anleitung zum, Anleitungen zum, Einführung, Einfuehrung, Einführungen, Einfuehrungen, Handbuch für, Handbücher, Handbuecher, Support, Diplomarbeit, Facharbeit, Hausarbeit, Hausarbeiten, Werk, Werke, Text, Übungsblatt, Uebungsblatt, Lösung, Loesung, Lösungen, Loesungen, Auflösung, Aufloesung, Auflösungen, Aufloesungen, Facharbeit, Facharbeiten, Forum, Training, manual, Folie, Folien, Lehrmittel, beratung, Definition von, Allgemeine Erklärung, Allgemeine Erklaerung, Allgemeine Erklärungen, Allgemeine Erklaerung, Allgemeine Erklaerungen, Einfache Erklärung einfach, Einfache Erklaerung einfach, Einfache Erklärungen, Einfache Erklaerung, Einfache Erklaerungen, zum Thema, FAQ, FAQs, Konzept, Lernkurs, Lern-Kurs, Lernkurse, Lern-Kurse, eine kurze Erklärung, Begriff, Begriffe, Erklärung zu Begriffen, begriffbestimmung, begriffbestimmung, Begriffsbestimmung, Begriffserklärung, Begriffserklaerung, Wort, Worterklärung, Worterklaerung, Definition, Beispiel, Beispiele, Bedeutung, Bedeutungen, was bedeutet, Begriffsdefinition, für Anfänger, fuer Anfaenger, für Einsteiger, für Beginner, zum selber Lernen, handout, hand out, web based training, WBT, Net Based Training, NBT, computer based training, CBT, virtual learning environment, virtual university, für die Schule, Seminar, Seminare, Vorgehensweise, Pädagogik, Paedagogik, Akademie, Onlineacademie, Onlineakademie, Wissen, Unterrichtsvorbereitung für das Fach, Unterricht, für Lehrer, für Lehrerinnen, Referat, Referate, Hausaufgabe, Hausaufgaben, Tip, Tipp. Tipps und Tricks, Tips und Tricks, Methode, Methoden, Methodik, Funktion, Funktionsweise, Aufbau, Prinzip, Grundlage, Grundlagen, Internetschulung, Unterlage, Unterlagen, Struktur, Frage, Fragen, Antwort, Antworten, Schulunterricht, zum erlernen, was ist das?, wie?, lerne, Onlineausbildung, Onlinelehrgang, Onlinekurs, Onlinebuch, Webbuch, Academy, Fachhochschule, FH, TFH, Hochschule, Universität, Universitaet, Uni, Schule, Berufsschule, Gymnasium, Erste Schritte mit, Dozent, Dozenten, Zusammenfassung, Übersicht, Term, Fachwort, Fachbegriff, Fachbegriffe, Grundbegriff, Grundbegriffe, Lektion, Lektionen, Bedienungsanleitung, Bedienungsanleitungen, Spezialist, Spezialisten, Coaching, Coach, Fachbuch, technologie, Unterschied zwischen, Unterschiede zwischen, lehren, unterrichten, für das Studium, für Studenten, für Studentinnen, für Studierende, für Schüler, für Schülerinnen, Wie kann ich, Wie kann man, Hilfe, selber, erstellen, Erstellung, Beginner, Online-Seminar, Online-Kurs, Online-Schulung, ich, gebrauchsanweisung, gebrauchsanleitung, Bedienungsanweisung, Einweisung, Kurzinfo, Internet-Kurs, Internet-Kurse, Online-Training, Intensiv, Intensivkurs, Vortragsreihe, Präsentation, Grundzüge, Mitschrift, Mitschriften, Verständnis, verstehen, anwenden, Hintergrundwissen, Hintergrund, Hintergründe, content, Funktionsprinzip, Schritt für Schritt; E-Learning; elearning; online learning; Fernlehre, Fernlehrgang, Fernlehrgänge, Referent, Referenten, Fernkurs, Fernkurse, Fernstudium, Fernschule, Fernuniversität, Fernlehrer, Denken, Qualifizierungsmaßnahme, Qualifizierung, Qualifizierungen, Volkshochschulkurs, Volkshochschulkurse, Internet-Learning-Plattform, Online-Learning-Plattform, E-Learning-Plattform, Internetlearning-Plattform, Onlinelearning-Plattform, Elearning-Plattform, jetzt, Kochbuch, einfach erklärt, Kenntnis, Kenntniss, Kenntnisse, deutsche Hilfe, lernen und verstehen; blended learning; courseware, Profi, Profis, professionell, professionelle, professionelles, profesionell, profesionelle, profesionelles, professionel, gekonnt, für Könner, Grundkurs, Leistungskurs, Aufbaukurs, Lehrtext, Lehrtexte, Fachtext, Fachtexte, Ausarbeitung, distance learning, Online Seminar, distance education, Online Tutorium, Online Tutorien, technology-based learning, Computer based learning, CBL, Internet Based learning, IBL, Web based learning, WBL, online-learning, OL, online-training, OT, CAI, Computer Assisted Instruction, CUU, Computerunterstützter Unterricht, Computer-unterstützter Unterricht, Know how, Grundkenntnis, Grundkenntnisse, Kompetenz, Schulungsunterlagen, Insiderwissen, Rat, Lehrerinnen und Lehrer, ABC, Überblick, Arbeitsblatt, Sekundarstufe, Oberstufe, Material, Materialien, Unterrichtsentwurf, Unterrichtsentwürfe, Lerntip, Lerntips, Lerntipp, Lerntipps, ebook, schnell lernen, Lerner, Lernender, Lernende Erwachsenenbildung, Frage und Antwort, Selbststudium, Selbstudium, Umschulung, , source, source code,sourcecode, Programmier sprache C++ Sprache, C++, CXX, C+, Programm, Programme, C++-Programm C++ Sprache C++ Programmiersprache C++ c++-Programme, Standard C++, Programmieren in C++, Programmieren in CXX, Programmieren in CPP, Programmieren in Cplusplus, Die Programmiersprache C++, Die Programmiersprache CXX, Die Programmiersprache CPP, Die Programmiersprache Cplusplus, Die Programmier sprache C++, Die Programmier sprache CXX, Die Programmier sprache CPP, Die Programmier sprache Cplusplus, CXX-Programmierung, C++-Programmierung, CPP-Programmierung, c-plus-plus, cpluplus-Programmierung, ANSI-C++, ANSI-CXX, ANSI-CPP, ANSI C++, ANSI CXX, ANSI-cpluscplus ISO-C++, ISO-CXX, ISO CPP, ISO C++, ISO CXX, ISO/IEC-C++, ISO/IEC-CXX, ISO/IEC CPP, ISO/IEC C++, ISO/IEC CXX, IEC-C++, IEC-CXX, IEC CPP, IEC C++, IEC CXX, International Standard ISO/IEC 14882 First edition 1998-09-01, ISO/IEC 14882:1998(E), ISO/IEC 14882:2003(E), ASC X3, 7/27/98, c plus plus, C ++, cplusplus, c plus plus, Standard C+ programmieren, Stamdard C++ programmieren, Standart C+ programmieren, Stamdart C++ programmieren, INCITS/ISO/IEC 14882-1998, Information Technology - Programming Languages - C++ (formerly ISO/IEC 14882-1998), Programmieren in C++,Programmiersprache C++ CPP CXX Cplusplus c plus plus International Standard ISO/IEC 14882 First edition 1998-09-01 Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd721233, slrprddef721233, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/c++_typdefinition_de