Zum Hauptinhalt springen

C++ - Reference

  1// Literatur: Vorlesungsunterlagen SEN (FH Hagenberg, HSSE Semester 1)
  2//            C++ Referenz (http://www.cplusplus.com)
  3
  4// Praeprozessoranweisungen
  5//      beginnen mit #
  6    #include <stdio>                // Systemheader
  7    #include "myModul.h"            // benutzerdefinierte Header
  8    
  9    #ifdef SYMBOL                   // bedingte Compilierung
 10    #ifndef SYMBOL
 11    #if SYMBOL == 1
 12        ...
 13    #else
 14        ...
 15    #endif
 16    
 17    #define SYMBOL
 18    #define SYMBOL 1
 19    #undef SYMBOL
 20    
 21    #define square(x) x*x           // Makros
 22    cout << square(2);
 23    
 24    #define assign(x,y) x=(y)
 25    assign(x,3);
 26
 27
 28// Modulisierung
 29//      asdf.h     ... Headerdatei
 30    #ifndef ASDF_H
 31    #define ASDF_H
 32    
 33    #include <string>
 34    
 35    void DoSomething(std::string str);
 36    
 37    #endif
 38
 39//      asdf.cpp    ... Sourcedatei
 40    #include "asdf.h"
 41    
 42    using namespace std;
 43    
 44    void DoSomething(string str)
 45    {
 46        ...
 47    }
 48
 49
 50// Namespaces
 51//      Deklarationen in gemeinsamen Namensraum zusammenfassen
 52    namespace mySpace
 53    {
 54        void doSomething()
 55        {
 56            ...
 57        }
 58    }
 59    
 60    mySpace::doSomething();
 61    
 62    using namespace mySpace::doSomething;
 63    doSomething();
 64    
 65    using namespace mySpace;
 66    doSomething();
 67    
 68    
 69    namespace                           // anonyme Namespaces
 70    {                                   // nur in eigenen Datei sichtbar
 71        void doSomething()
 72        {
 73            ...
 74        }
 75    }
 76    doSomething();
 77
 78
 79// Datentypen
 80    bool                // true, false
 81    char                // 1 Byte                  -128  bis            127
 82    unsigned char       // 1 Byte                     0  bis            255
 83    int                 // 2 Byte               -32 768  bis         32 767
 84                        // 4 Byte        -2 147 483 648  bis  2 147 483 647
 85    unsigned int        // 2 Byte                     0  bis         65 535
 86                        // 4 Byte                     0  bis  4 294 967 295
 87    long                // 8 Byte
 88    unsigned long       // 8 Byte
 89    float               // 4 Byte        +/- 3,4E+/-38  ( 7 digits)
 90    double              // 8 Byte        +/- 1,7E+/-308 (15 digits)
 91    
 92    char str[] = "hello";   // gespeichert wird: hello\0
 93    string                  // basic_string<char>    ... 8 Bit pro Zeichen
 94    wstring                 // basic_string<wchar_t> ... 16 Bit pro Zeichen
 95    
 96    size_t s = sizeof(var);
 97    
 98    int arr[] = {...};
 99    size_t arrElems = sizeof(arr) / sizeof(int);
100
101
102// Arrays
103    int values[10];
104    values[0] = 0;
105    ...
106    values[9] = 0;
107    values[9]  =  *(values + 9)
108    
109    int values[] = {1,2};
110    int values[10] = {1,2};     // values[2] ... values[9] sind 0
111    int values[10] = {};        // alle values sind 0
112    
113    int values[2][3];
114    int values[2][3] = {{1,2,3},{4,5,6}}
115    values[0][0] = 0;
116    ...
117    values[1][2] = 0;
118    values[1][2]  =  *(values + (1 * 3) + 2);
119
120
121// Enumerationstypen
122    enum eColor {red, green, blue, yellow}; // intern integer als Datentyp
123    eColor c = red;
124    
125    enum eColor {red = 2, green, blue, yellow};
126
127
128// Typdefinitionen
129    typedef unsigned int uint;
130    uint number;
131    
132    typedef int tArr[2][2];
133    tArr arr;
134
135
136// Pointer, dynamische Variablen
137    int value = 10;
138    int *pInt = 0;
139    pInt = new int;
140    
141    *pInt = 5;
142    cout << *pInt << endl;
143    
144    delete pInt;
145    pInt = 0;
146    
147    pInt = &value;
148    *pInt = 5;
149    
150    
151    int *arr = new int[10];
152    arr[0] = 0;
153    ...
154    arr[9] = 0;
155    delete[] arr;
156    arr = 0;
157    
158    int const * const pt = &var;       // konstanter Pointer auf
159                                       // konstanten Integer-Wert
160    *pt = 1;                           // Fehler, da "int const"
161    pt = 0;                            // Fehler, da "* const"
162    
163    //Probleme: Memory-Leaks     ... Speicherfreigabe wurde vergessen
164    //          Dangling-Pointer ... Speicher wurde freigegeben,
165    //                               Pointer zeigt aber noch auf Speicher-
166    //                               bereich
167
168
169// Funktionspointer
170    void f1()
171    {
172        ...
173    }
174    
175    void (*pFunction)();
176    pFunction = f1;
177    pFunction();
178
179
180// Strukturen
181    struct sValues
182    {
183        int val1;
184        int val2;
185        int val3;
186    };
187    
188    sValues values;
189    values.val1 = 0;
190    
191    sValues *pValues = new sValues;
192    (*pValues).val1 = 0;
193    pValues->val1 = 0;
194    delete pValues;
195    pValues = 0;
196    
197    struct                                      // anonyme Datenstrukturen
198    {
199        int val1;
200        int val2;
201        int val3;
202    } values1, values2;
203    values1.val1 = 0;
204    values2.val1 = 0;
205
206
207// Bitfelder
208    struct BitField
209    {
210        unsigned int a:3;                       // 000 - 1111
211        unsigned int b:2;                       // 00 - 11
212        unsigned int c:3;                       // 000 - 111
213    };
214    
215    BitField bf;
216    bf.a = 5;
217    bf.b = 1;
218    bf.c = 4;
219
220
221// Unions
222    union uint32
223    {
224        unsigned int integerVal;
225        unsigned char charVal[4];
226    };
227    
228    uint32 val;
229    val.integerVal = 0;
230    val.charVal[0] = 0xff;
231
232
233// arithmetische Operatoren
234    +                   // Addition
235    -                   // Subtraktion
236    *                   // Multiplikation
237    /                   // Division
238    %                   // Modulo (Divisionsrest)
239
240    i += 2;             // i = i + 2;
241    i -= 2;
242    i /= 2;
243    i *= 2;
244    
245    i++;                // Postincrement: i = i + 1;
246    ++i;                // Preincrement
247    i--;                // Postdecrement
248    --i;                // Preincrement
249
250
251// Vergleichsoperatoren
252    ==                  // gleich
253    !=                  // ungleich
254    <                   // kleiner
255    <=                  // kleiner gleich
256    >                   // groesser
257    >=                  // groesser gleich
258
259
260// logische Operatoren
261    &&                  // und (mit Kurzschlussauswertung)
262    &                   // und
263    ||                  // oder (mit Kurzschlussauswertung)
264    |                   // oder
265    !                   // nicht
266
267
268// Bitoperationen
269    &                   // bitweises und
270    |                   // bitweises oder
271    ~                   // bitweises nicht
272    ^                   // XOR (exclusives oder)
273    >>                  // Rechtsshift
274    <<                  // Linksshift
275
276
277// Alternativeoperator
278    y = (x < 0) ? 0 : 1;
279    
280    if (x < 0)
281        y = 0;
282    else
283        y = 1;
284
285
286// Casts
287//      C - Casts
288    int x;
289    double y;
290    
291    x = (int)y;
292    y = (double)x;
293    
294//      C++ - Casts
295    dynamic_cast
296        // konvertiert einen Zeiger eines Klassentyps auf einen
297        // Zeiger in gleichen Ableitungskette
298        // uebernimmt Typpruefung, nur auf Zeiger und Referenzen von
299        // polymorphen Typen
300    static_cast
301        // ohne Typpruefung, auch fuer nicht-polymorphen Typen (~ wie C-Casts)
302    const_cast
303        // Qualifier const und volatile wird entfernt
304    reinterpret_cast
305        // Zeiger kann in beliebigen anderen Zeiger konvertiert werden
306    
307    baseClass *pCl = 0;
308    derivedClass cl;
309    pCl = dynamic_cast<baseClass *>(&cl);
310
311
312// Anweisungen
313    break               // Schleife wird beendet
314    continue            // Sprung zum Schleifenstart
315    
316    goto A;             // beliebiges Sprungziel
317    A: ...
318
319
320// Vorwaertsdeklaration
321    int doSomething();
322    
323    int main()
324    {
325        ...
326        doSomething();
327        ...
328    }
329    
330    void doSomething()
331    {
332        ...
333    }
334
335
336// Parameteruebergabe
337    // "call by value" - Eingabeparameter
338        void doSomething(int param)
339    // "call by reference" - Uebergangsparameter
340        void doSomething(int &param)
341    
342    // "call by reference", bestimmte Anzahl
343        void doSomething(int arr[10])
344    // "call by reference", beliebige Anzahl
345        void doSomething(int arr[], size_t elems)
346             =
347        void doSomething(int *arr, size_t elems)
348    // "call by value"
349        void doSomething(int const arr[], size_t elems)
350             =
351        void doSomething(int const *arr, size_t elems)
352    // "call by value", mehrdimensionales Array
353        void doSomething(int const arr[][cols]);
354    
355    // Default-Parameter (nur im Header oder im main)
356        void doSomething(int val = 0)
357
358
359// Variablenspezifizierung
360    static
361        // - Lokale Variablen bleiben beim Verlassen des umschliessenden
362        //   Blocks erhalten
363        // - Globale Variablen haben damit nur Datei-Sichtbarkeit
364        // - Member Variablen: es existiert nur eine Instanz fuer alle
365        //   Objekte der selben Klasse
366        // - frei stehende Funktionen haben damit nur Datei-Sichtbarkeit
367        // - Methoden: koennen ohne Instanz einer Klasse aufgerufen werden,
368        //   koennen aber nur auf statische Member Variablen zugreifen
369    extern
370        // Angabe, dass Variable oder Funktion in einer anderen Quelldatei
371        // definiert ist
372    mutable
373        // Member Variablen: die Variable kann auch bei konstanten Objekten
374        // einer Klasse veraendert werden
375    auto
376        // Speicher automatisch belegen und frei geben
377    register
378        // es wird versucht die Variable in einem Register abzulegen
379        // (zwecks Performance)
380    volatile
381        // Variable kann Externe veraendert werden und sollte durch den
382        // Compiler nicht optimiert werden
383    const
384        // Veraenderungen sind nicht zulaessig
385
386
387// Schleifen und Bedingte Ausfuehrung
388    if(...)
389    {
390        ...
391    }
392    else if(...)
393    {
394        ...
395    }
396    else
397    {
398        ....
399    }
400    
401    for (int i=0; i<max; i++)
402    {
403        ...
404    }
405    
406    while(...)
407    {
408        ...
409    }
410    
411    do
412    {
413        ...
414    }
415    while(...);
416    
417    switch(nr)
418    {
419    case 0:
420        ...
421        break;
422    case 1:
423        ...
424        break;
425    default:
426    }
427
428
429// Fehlerbehandlung
430    #include <cassert>
431    assert(NoFailure() == true);
432    
433    try
434    {
435        if(...)
436            throw "Fehler in ...";
437    }
438    catch(char const *error)
439    {
440    }
441    catch(...)
442    {
443    }
444    
445    try
446    {
447        if(...)
448            throw (string("Fehler in ..."));
449    }
450    catch(string const &str)
451    {
452    }
453
454
455// Rekursion
456    int fakulty(int x)
457    {
458        if (x <= 1)                                 // Abbruchbedingung
459            return 1;
460        
461        return (fakulty(x-1) * x);                  // Rekursion
462    }
463
464
465// Templates
466    template <typename T>
467    void swap(T &x, T &y)
468    {
469        T tmp = x;
470        x = y;
471        y = tmp;
472    }
473    
474    swap(int1, int2);
475    swap(str1, str2);