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.
Beispiel | Art |
---|
1 | int |
1L | long int |
1LL- | long long int |
1.0 | doppelt |
1.0F | schweben |
'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 falsch | bool |
0b101 | binä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.
Operator | Cardinality | Assoziativität |
Höchste Priorität | () [] ->. | einstellige | links nach rechts |
! ~ + - ++ - * (Cast) sizeof | einstellige | links nach rechts |
* /% | binär | links nach rechts |
+ - | binär | links nach rechts |
lt; lt; >> | binär | links nach rechts |
lt; lt; =>> = | binär | links nach rechts |
==! = | binär | links nach rechts |
| binär | links nach rechts |
^ | binär | links nach rechts |
| | binär | links nach rechts |
| binär | links nach rechts |
|| | binär | links nach rechts |
?: | ternären | rechts nach links |
= * = / =% = + = - = = ^ = | = lt; lt; = >> = | binär | rechts nach links |
Der niedrigste Priorität | , | binär | links 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