8 C ++ Not-So-Beginner-Funktionen

8 C ++ Not-So-Beginner-Funktionen - Dummies

Die Sprache C ++ enthält so viele Funktionen, dass Anfänger nicht jeden einzelnen verstehen können. Glücklicherweise müssen Sie nicht alle Funktionen der Sprache beherrschen, um große, reale Programme zu schreiben. Im Folgenden sind zehn Features aufgeführt, die Sie sich vielleicht ansehen sollten, nur für den Fall, dass Sie sie in anderen Programmen sehen.

Der C ++ - Befehl goto

Dieser Befehl geht zurück zu C, dem Vorläufer von C ++. Im Prinzip ist die Verwendung dieses Befehls einfach. Sie können Goto-Label platzieren. wo auch immer du willst. Wenn C ++ diesen Befehl erreicht, wird die Steuerung sofort an das Label übergeben, wie in diesem Code-Schnipsel gezeigt:

 for (;;) {if (bedingter Ausdruck) {goto outahere;} // ... was immer Sie wollen ...} outahere: // ... Programm geht hier weiter ... 

In der Praxis jedoch Goto führt viele Wege ein, um es zu vermasseln. Auf jeden Fall dauerte es nicht lange, bis Programmierer bemerkten, dass die beiden häufigsten Verwendungen des goto darin bestanden, Schleifen zu verlassen und innerhalb einer Schleife zum nächsten Fall zu gehen. Das C-Normen-Komitee führte break and continue ein und beseitigte fast vollständig die Notwendigkeit des goto-Befehls.

Der ternäre C ++ Operator

Der ternäre Operator ist ein für C und C ++ eindeutiger Operator. Es funktioniert wie folgt:

 int n = (bedingt)? Ausdruck1: Ausdruck2; 

Das? Der Operator wertet zuerst die Bedingung aus. Wenn die Bedingung wahr ist, ist der Wert des Ausdrucks gleich dem Wert von Ausdruck1; Ansonsten ist es gleich dem Wert von Ausdruck2.

Beispielsweise könnten Sie eine Funktion maximum () wie folgt implementieren:

 int max (int n1, int n2) {return (n1> n2)? n1: n2;} 

Der ternäre Operator kann auf jeden numerischen Typ angewendet werden, kann aber nicht überladen werden. Der ternäre Operator ist wirklich ein Ausdruck - keine Steueranweisung wie ein if.

Aufzählungstypen in C ++

Die einfache Idee ist, dass Sie Konstanten definieren und C ++ ihnen Werte zuweisen können, wie hier gezeigt:

 enum Colors {SCHWARZ, BLAU, GRÜN, GELB, ROT}; Farben myColor = SCHWARZ; 

Das Problem mit Aufzählungstypen liegt in der Implementierung: Anstatt einen echten Typ zu erstellen, verwendet C ++ ganze Zahlen. In diesem Fall wird BLACK der Wert 0 zugewiesen, BLUE wird 1 zugewiesen, GREEN2 und so weiter.

Die Standardbibliothek 2011 für C ++ hat dieses Problem "behoben", indem sie einen aufgezählten Klassentyp erstellt hat, wie im folgenden Ausschnitt gezeigt:

 enum class Farben {SCHWARZ, BLAU, GRÜN, GELB, ROT} ; Farben myColor = Farben:: SCHWARZ; 

In dieser Version ist Colors ein neuer Typ.Jede der Konstanten, BLACK, BLUE usw., ist ein Member des Typs Colors. Sie können ein Objekt der Klasse Colors immer noch in ein Int umwandeln. Eine implizite Umwandlung ist jedoch nicht zulässig.

C ++ Namespaces

Es ist möglich, verschiedenen Entitäten in zwei verschiedenen Bibliotheken den gleichen Namen zu geben. Beispielsweise ordnet die Funktion grade () in der Student-Bibliothek wahrscheinlich eine Note zu, wohingegen die Funktion grade () in der CivilEngineering-Bibliothek die Neigung an der Seite eines Hügels festlegen kann. Um dieses Problem zu vermeiden, erlaubt C ++ dem Programmierer, ihren Code in einem separaten Namespace zu platzieren. Daher unterscheidet sich die Note innerhalb des Student-Namensraums von der Note in CivilEngineering.

Der Namespace ist über den Klassennamen hinaus. Die grade () - Memberfunktion der Klasse BullDozer im Namespace CivilEngineering hat den erweiterten Namen CivilEngineering:: BullDozer:: grade ().

Alle Bibliotheksobjekte und Funktionen befinden sich im Namensraum std. Die Anweisung am Anfang der Programmvorlage mit Namespace std; sagt, wenn Sie das angegebene Objekt nicht im Standard-Namespace sehen, dann suchen Sie in std.

reine virtuelle Funktionen in C ++

Sie müssen keine virtuell deklarierte Funktion definieren. Eine solche undefinierte Funktion ist als reine virtuelle Mitgliedsfunktion bekannt. Zu diesem Zeitpunkt werden die Dinge jedoch kompliziert. Beispielsweise wird eine Klasse mit einer oder mehreren reinen virtuellen Funktionen als abstrakt bezeichnet und kann nicht zum Erstellen eines Objekts verwendet werden. Nehmen Sie dieses Thema auf, nachdem Sie sich mit virtuellen Funktionen und späterem Binden wohl gefühlt haben.

Die C ++ String-Klasse

Die meisten Sprachen enthalten eine String-Klasse als einen intrinsischen Typ für die einfache Handhabung von Zeichenfolgen. Theoretisch sollte die String-Klasse dasselbe für C ++ tun. In der Praxis ist das jedoch nicht so einfach. Da string kein intrinsischer Typ ist, ähneln die Fehlermeldungen, die der Compiler beim Auftreten von Fehlern ausgibt, eher denen, die benutzerdefinierten Klassen zugeordnet sind. Für einen Anfänger können diese Nachrichten sehr schwer zu interpretieren sein.

string ist nicht einmal eine Klasse. Es ist eine Instanz einer Vorlagenklasse. Die Fehlermeldungen können atemberaubend sein.

Mehrfachvererbung in C ++

Eine Klasse kann tatsächlich mehr als eine Basisklasse erweitern. Das klingt einfach, kann aber sehr kompliziert werden, wenn die beiden Basisklassen Memberfunktionen mit demselben Namen enthalten. Noch schlimmer ist es, wenn beide Basisklassen selbst Unterklassen einer bestimmten Klasse sind.

In der Tat treten so viele Probleme auf, dass C ++ die einzige C-ähnliche Sprache ist, die Mehrfachvererbung unterstützt. Java und C #, beides Sprachen, die von C ++ abgeleitet sind, haben entschieden, die Unterstützung für die Mehrfachvererbung aufzugeben.

C ++ - Vorlagen und die Standardvorlagenbibliothek

Die Macher von C ++ haben bemerkt, dass ähnliche Funktionen wie die folgenden sind:

 int max (int n1, int n2) {if (n1> n2) {return n1;} return n2;} double max (double n1, double n2) {if (n1> n2) {return n1;} return n2;} char max (char n1, char n2) {if (n1> n2) {return n1;} return n2;} 

"Wäre es nicht cool", sagt man zu einem anderen, "wenn Sie den Typ durch einen Pseudo-Typ T ersetzen könnten, den Sie zur Kompilierzeit definieren könnten?"Bevor Sie es wissen, werden presto - Vorlagen Teil von C ++:

 Vorlage T max (T t1, T t2) {if (t1> t2) {return t1;} return t2;} 

Jetzt kann der Programmierer Erstellen Sie ein max (int, int), indem Sie T durch int ersetzen und das Ergebnis kompilieren. Erstellen Sie ein max (double, double), indem Sie T durch double ersetzen und so weiter. Das Standardisierungskomitee hat sogar eine ganze Klassenbibliothek herausgegeben, die als Standard Template Library (kurz: STL) bekannt ist und auf Vorlagenklassen basiert.

Für einen Anfänger beginnt das Thema der Template-Klassen jedoch syntaktisch sehr kompliziert zu werden. Darüber hinaus sind die Fehler, die der Compiler erzeugt, wenn Sie eine Template-Instanziierung falsch erhalten, für einen Experten verwirrend, ganz zu schweigen von einem Anfänger. Dies ist definitiv ein Thema, das warten muss, bis Sie sich mit der Grundsprache wohl fühlen.