C ++ für Dummies

Um eine Berechnung in der C ++ Programm ausführen müssen Sie einen Ausdruck. Ein Ausdruck ist eine Aussage, die sowohl einen Wert und einen Typ hat. In der C ++ Programm, ist eine Erklärung Anweisung, die eine Variable definiert, oder es ist ein "Haltetank" für irgendeine Art von Wert wie eine Zahl oder ein Zeichen.

Expressions

Ausdrücke nehmen Sie eine der folgenden Formen:

objName // für eine einfache objectoperator Ausdruck // für einstellige operatorsexpr1 Operator ausdr2 // für binäre operatorsexpr1? expr2: expr3 // für das ternäre operatorfuncName ([Argumentliste]) - // für Funktionsaufrufe

Wörtliche Ausdrücke

Eine wörtliche ist eine Form der konstanten Ausdruck. Die verschiedenen Typen von Literalen sind in der folgenden Tabelle definiert.

BeispielArt
1int
1Llong int
1LL-long long int
1.0doppelt
1.0Fschweben
'1'verkohlen
"ein Faden"char * (automatisch mit einem Null-Zeichen beendet)
L "eine Zeichenfolge"wchar_t *
U8 "Dies ist ein UTF-8-String mit UTF-8-Zeichen: u2018"char8_t *
u "dies ist ein UTF-16-String mit einem UTF-16-Zeichen: u2018"char16_t *
U "Dies ist ein UTF-32-String mit einem UTF-32-Zeichen: U00002018"char32_t *
wahr falschbool
0b101binär (C ++ 2014-Standard)

Erklärungen

Erklärungen verwenden sowohl intrinsische als auch benutzerdefinierte Typen. Die intrinsischen Typen sind

[]verkohlen[] Wchar_t [] [intfloat] [lang] doublebool

Erklärungen haben eine der folgenden Formen:

[] [Const] var [= Ausdruck] type - // Variable [] [const] type array [size] [= {list}] - // array [const] type Objekt [(Argumentliste)] - // Objekt [const] Objekt [= {Argument list}] type - // Alternative [const] * [const] type ptr [= Zeiger Ausdruck] - // pointertype refname = objekt- // Reference fnName ([Argumentliste]) - // Funktion

Das Schlüsselwort Auto kann verwendet werden, wenn C ++ den Typ der Variable selbst bestimmen kann:

auto var = 1L- // die Art der var long int

Das Schlüsselwort decltype extrahiert den Typ eines Ausdrucks. Diese können dann verwendet werden, wo immer ein Typname verwendet wird. Zum Beispiel verwendet das folgende Beispiel decltype eine zweite Variable mit dem gleichen Typ wie eine vorhandene Variable zu deklarieren:

decltype (Q1) var2- // die Art der var2 ist die gleiche wie var1

Eine Funktionsdefinition hat das folgende Format:

// Einfache Funktion [] geben fnName (Argumentliste) {...} // Member-Funktion außerhalb der Klasse definiert [inline] Typ Class :: func (Argumentliste) [const] {...} // Konstruktor / Destruktoren kann auch außerhalb von classClass :: Class ([Argumentliste]) {...} Class :: ~ Class () {...} // Konstrukteuren / destructor gelöscht oder voreingestellt werden können anstelle von definitionClass definiert werden //: : Klasse ([Argumentliste]) = -Klasse :: ~ Klasse () = -

Ein überladener Operator sieht aus wie eine Funktionsdefinition. Die meisten überladenen Operatoren können entweder als Mitglied oder einfache Funktionen geschrieben werden. Wenn sie als Member-Funktion geschrieben, *Dies ist das erste Argument für den Bediener angenommen:

Meine Klasse operator + (const MyClass m1, const MyClass m2) - // simpleMyClass MyClass :: operator + (const MyClass m2) - // Mitgliedschaft

Benutzer können auch ihre eigenen Typen mit dem definieren Klasse oder structStichworte:

 Classname [: [virtuellen] [public] Baseclass] {: // constructorClassName ([arg list]) lt; [: Mitglied (val), ...] {...} | -> Klassenname () [= -] // destructor [virtuellen] ~ Classname () lt; {...} | [= -> // Öffentliche Daten memberstype dataMemberName [= Anfangs] - // public Mitglied functionstype memberFunctionName ([arg list]) [{...}] // const Mitglied Function memberFunctionName ([arg list]) const [{. ..}] // virtuelle Mitglied functionsvirtual Typ memberFunctionName ([arg list]) [{...}] - // rein virtuelle Mitglied functionsvirtual Typ memberFunctionName ([arg list]) = 0 - // Funktion, die eine Basis außer Kraft setzen müssen Klasse Function memberFunctionName ([arg list]) Aufschalten - // eine Funktion, die ([arg list]) endgültig nicht in einem subclasstype memberFunctionName außer Kraft gesetzt werden -} -

Darüber hinaus kann ein Konstruktor mit einem einzigen Argument gekennzeichnet werden als explizit was bedeutet, dass es nicht in einer impliziten Umwandlung wird von einem Typ in einen anderen verwendet werden. Flagging einen Konstruktor als Standard bedeutet "die Standard-C ++ Konstruktor Definition verwenden". Flagging einen Konstruktor als löschen entfernt die Konstruktordefinition ++ Standard C.

C ++ unterstützt zwei Arten von Aufzählungstypen. Die folgende alte Aufzählungstyp erzeugt keinen neuen Typ:

Enum STATE {DC, // bekommt 0ALABAMA, // bekommt 1ALASKA, // bekommt 2ARKANSAS, // bekommt 3 // ... und so weiter} -int n = ALASKA- // ALASKA ist vom Typ int

Standardmäßig ist ein einzelner Eintrag vom Typ int aber dies kann in der C ++ 2011-Standard geändert werden:

Enum ALPHABET: char {A = 'a', // bekommt 'A'B, // bekommt' B'C, // wird 'c' // ... und so weiter} -char c = A // A ist vom Typ char

C ++ 2011 erlaubt ein zweites Format, das eine neue Art erschafft:

// Die folgende Aufzählung einen neuen Typ STATEenum Klasse STATE definiert {DC, // bekommt 0ALABAMA, // bekommt 1ALASKA, // bekommt 2ARKANSAS, // bekommt 3 // ... und so weiter} -state s = STATE :: ALASKA- // jetzt ist STATE eine neue Art // folgendes eine andere zugrunde liegende typeenum Klasse ALPHABET verwendet: char {A = 'a', // bekommt 'A'B, // bekommt' B'C, // bekommt ' c '// ... und so weiter} -Alphabet c = ALPHABET :: A- // A ist vom Typ ALPHABET

Template Erklärungen haben ein etwas anderes Format:

// Typ T wird durch den Programmierer bei usetemplate bereitgestellt  Typ Function ([arg list]) template  class classname {{...}} -

Operatoren in C ++ Programmierung

Alle Operatoren in C ++ eine definierte Funktion auszuführen. Diese Tabelle zeigt den Operator, Vorrang (die bestimmt, wer zuerst geht), Mächtigkeit und Assoziativität in der C ++ Programm.

OperatorCardinalityAssoziativität
Höchste Priorität() [] ->.einstelligelinks nach rechts
! ~ + - ++ - * (Cast) sizeofeinstelligelinks nach rechts
* /%binärlinks nach rechts
+ -binärlinks nach rechts
lt; lt; >>binärlinks nach rechts
lt; lt; =>> =binärlinks nach rechts
==! =binärlinks nach rechts
binärlinks nach rechts
^binärlinks nach rechts
|binärlinks nach rechts
binärlinks nach rechts
||binärlinks nach rechts
?:ternärenrechts nach links
= * = / =% = + = - = = ^ = | = lt; lt; = >> =binärrechts nach links
Der niedrigste Priorität,binärlinks nach rechts

Flow Control in C ++ Programmierung

Der folgende C ++ Strukturen lenken den Fluss der Steuerung durch das Programm. Wenn Sie ein erfahrener Programmierer, die Funktion dieser Strukturen sind aus anderen Sprachen vertraut sein.

OB

In den folgenden Befehl auswertet booleanExpression. Wenn es auswertet wahr, dann geht die Steuerung zu expressions1. Wenn nicht, dann geht die Steuerung auf den optionalen expressions2.

if (boolescherAusdruck) {expressions1 -} [else {expressions2-}]

WÄHREND

In den folgenden Befehl auswertet booleanExpression. Wenn diese auswertet wahr, dann geht die Steuerung zuAusdrücke. Am Ende des Blocks, geht die Steuerung zurück zu boolescherAusdruck und wiederholt den Prozess.

während (boolescherAusdruck) {expressions-}

DO # 133-WÄHREND

In den folgenden Befehl ausgeführt wird Ausdrücke. Er wertet dann boolescherAusdruck. Wenn dies als wahr ausgewertet, die Steuerung kehrt zum Anfang der Schleife zurück und wiederholt den Vorgang.

do {expressions-} while (boolescherAusdruck) -

FÜR

In den folgenden Befehl ausgeführt wird initCommand die ein Ausdruck oder eine Variable Erklärung kann sein. Er wertet dann boolExpression. Wenn diese auswertet wahr, dann geht die Steuerung zu expressions1. Ob boolExpression ist falsch, dann geht die Steuerung zu der ersten Anweisung nach der geschlossenen Klammer von der für Schleife. Einmal Ausdrücke abgeschlossen ist, geht die Steuerung zu dem enthaltenen Expression in loopExpression vor der Rückkehr in boolExpression um den Prozess zu wiederholen. Ob initCommand out of scope erklärt eine neue Variable, es so bald wie geht die Steuerung außerhalb der Schleife verläuft.

für (initCommand- boolExpression- loopExpression) {expressions-}

FÜR JEDE)

Die 2011 Standard führt eine zweite Form für Schleife manchmal als "für jeden" wegen seiner Ähnlichkeit zu bekannten der für jede in einigen anderen Sprachen. In dieser Form erklärt die Variable in Erklärung nimmt den Wert des ersten Elements von Liste und führt die Ausdrücke Block. Wenn Sie fertig sind, nimmt die deklarierte Variable den zweiten Wert von Liste und führt Ausdrücke aufs Neue. Dieser Vorgang wird für jeden Wert wiederholt in Liste.

für (Erklärung: list) {expressions-}

SCHALTER

In den folgenden Befehl auswertet integerexpression und vergleicht das Ergebnis mit jedem der Fälle aufgeführt. Wenn der Wert zu finden ist eine der konstanten ganzzahligen Werten zu entsprechen, val1, val2, usw., wird die Steuerung an die entsprechende Menge von Ausdrücken und fährt fort, bis die Steuerung ein begegnet Unterbrechung. Wenn Ausdruck einer der Werte nicht gleich sind, wird die Steuerung an die expressionsN folgende Standard.

Schalter (integerExpression) {case Wert1: expressions1-break-Fall val2: expressions2-Break- [Standard: expressionsN-]}

Break, continue, GOTO

EIN fortsetzen geht die Steuerung zu dem Ende der geschlossenen Klammer einer der Schleifensteuerungen. Dies bewirkt, daß die Schleife mit der nächsten Iteration fort. Zum Beispiel verarbeitet die folgende Schleife Primzahlen zwischen 1 und 20:

for (int i = 0-i lt; 20- i ++) {// wenn die Zahl nicht prim ... if) {// ... überspringen auf den nächsten Wert von icontinue (isPrime (i!) -} // Gehen auf Verarbeitung}

EIN Unterbrechung geht die Steuerung zu der ersten Anweisung nach der geschlossenen Klammer nach einem der Looping-Befehle. Dies bewirkt, dass die Ausführung der Schleife sofort zu beenden. Zum Beispiel liest die folgenden Zeichen bis und End-of-Datei angetroffen wird:

while (true) {// eine Linie vom Eingang lesen objectinput >> line - // wenn ein Ausfall oder End-of-Datei auftritt ... if (cin.eof () || cin.fail ()) {// ... dann die LoopBreak verlassen -} // Prozess die Zeile}

EIN goto Label geht die Steuerung zu dem Etikett. Der Bruch obigen Beispiel könnte geschrieben worden sind wie folgt:

while (true) {// eine Linie vom Eingang lesen objectinput >> line - // wenn ein Ausfall oder End-of-Datei auftritt ... if (cin.eof () || cin.fail ()) {// ... dann verlassen Sie den loopgoto exitLabel -} // Prozess die Zeile} exitLabel: // control weiter hier

Menü