CPP Howto

Aus StudiWiki

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

[bearbeiten] Variablen

typ name;              // Uninitialisierte Variable
                       // MUSS VOR BENUTZUNG INITIALISIERT (ZUGEWIESEN) WERDEN
typ name = Wert;       // Variable mit Initialisierung

[bearbeiten] Konstanten

const typ NAME = Wert; // Konstante in GROSSBUCHSTABEN
// Dieses Komentar sagt: Nur eine Variable / Konstante pro Zeile!

int x = 5;
const double PI = 3.14158;

[bearbeiten] Praeprozessor-Sachen

#ifndef P
#define P 3.14158
#else
#undef P
#endif

// Alle define-Sachen werden durch den Praeproz. im Code ersetzt!
// in jedem Header-File STEHT Beispielsweise

#ifndef INCLUDED_KNOTENPUNKT_HPP //erste Zeile ueberhaupt.
#define INCLUDED_KNOTENPUNKT_HPP //zweite Zeile
...
#endif //allerletzte Zeile

// dadurch wird verhindert, dass ein Header mehrmals vom Compiler included wird.

[bearbeiten] Typen

char    // einzelnes Zeichen - definiert in '
string  // Zeichenfolge - definiert in "
bool    // true(!=0)-false(0)
int     // 32-bit pos und neg ganze Zahl.
float   // 32-bit Gleitkommazahl (Benutzung von Konstanten: float myFloat = 1.0f)
double  // 64-bit Gleitkommazahl
void    // 42

// es gibt mods wie z.B.
unsigned int  //nur Positive Zahlen, dadurch auch doppelt so hohes 'Last
unsigned char //hat genauso wie "char" nur 1byte, laesst sich aber von 0..255 ansprechen, 
              //statt -128..127

[bearbeiten] Array

int Ding[5][10]; //erzeugt ein 2dim-Array
int *DynDing = new int[10]; // Array dynamisch erzeugt. Wenn groesse zur Laufzeit unbekannt ist.
delete[] DynDing; // So und nur so und immer Speicher wieder freigeben !!!!

[bearbeiten] Typendefinition

typedef unsigned int natural;
natural x = 5;

enum Farben {Rot, Gruen, Gelb, Blau, Pink};
Farben meineFarbe = Rot;

struct meineKomplexe {
  double real;
  double imag; 
};
meineKomplexe K;
K.real = 5.3;
K.imag = 3.5;

[bearbeiten] Zuweisungen & Operatoren

i = i*7;
i = 3^(7-x);
k = i++; // dasselbe wie: i = i + 1; k = i;
k = ++i; // dasselbe wie: k = i; i = i + 1;
// Genau aus den obigen zwei Zeilen sollten man ++ nicht mit Zuweisungen mergen...
i++;
k=i;
// so soll es aussehen!
// -- analog!

i += 4; // wie i = i + 4;
// *=, -=, /= analog!

//Operatoren NUR auf gleichen Typen verwenden und implizite Casts vermeiden

// Boese:
int i = 4 + 1.0; // impliziter c-Cast und ist deshalb des Ludewigs .. aeh.. Teufels.
// Gut:
int i = 4 + static_cast<int>(1.0);

[bearbeiten] Ablaufsteuerung

for (int i = 0; i<10; i++){
  schleifeninhalt;
    }

while (i<10) {
  schleifeninhalt;
  i++ // dasselbe wie: i = i + 1;
    }

if (i>10) {
  Anweisungen;
} else {
  if (i>20) {
    Anweisungen;
  } else {
    Anweisungen;
  }
}

switch (meineFarbe) {
  case Rot:
    Anweisungen;
    break;
  case Gruen:
    Anweisungen;
    break;
  case Blau:
    Anweisungen;
    break;
  default:
    Anweisungen;
}

[bearbeiten] Pointer und Referenzen

// * ist ein Pointer
// & ist eine Referenz

meineKomplexe K;
meineKomplexe *g; // g ist ein Pointer auf den "Record" meineKomplexe
g = &K;           // g wird auf die "Adresse" von K gesetz
// zum Gruebeln (Beschwerden an grottesn@studi...)
g->real = K.imag; // no comment 
*g.real = &K->imag; // identisch zur Zeile darueber

[bearbeiten] Klassen, Objekte


class KlassenName:public Vaterklasse {
public:
  KlassenName{Parameter}; // Konstruktor: wird bei "new" ausgefuehrt;
  ~KlassenName{};         // Destruktor:  wird bei "delete" ausgefuehrt;
  //Einzigen Methode, die KEINEN Rueckgabewert haben.. auch nicht void.
  //Deklaration von public-Variablen und public-Methoden

protected:
  //analog

private:
  //analog
};// <-- DIESER ";" IST DIE HAEUFIGSTE FEHLERQUELLE IM HPP,
  // da der Fehler im CPP gemeldet wird.

// Verwendung von virtual-Methoden:
class a {
public: 
  int get1() { return 1; }
  virtual int get2() { return 1; }
};

class b : public a { // b erbt von a
public:
   int get1() { return 2; } // überschreibt get1 von a
   virtual int get2() { return 2; } // überschreibt get2 von a
};

b bObjekt(); // Ruft Konstruktor von b auf
a *aPointer = bObjekt; // Ein Pointer vom Typ a, der auf ein Objekt vom Typ b zeigt
a->get1(); // gibt 1 zurück !!!!
a->get2(); // gibt 2 zurück !!!!
// ... Nachdenken und Verstehen!  

[bearbeiten] Assert

assert(int expression)
// Evaluates an expression and when the result is FALSE, prints a diagnostic message and aborts the program
// sollte zum pruefen von Preconditions benutzt werden.

[bearbeiten] Exception-Handling

// Example of the try and catch statements
try {
    // Write the file header
    file.Write((LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER));

    // Write the DIB header and the bits
    file.WriteHuge(lpBI, dwDIBSize);
}

catch (CFileException* e) {
    ::GlobalUnlock((HGLOBAL) hDib);
    throw;
}

::GlobalUnlock((HGLOBAL) hDib);
   return TRUE;

[bearbeiten] stl-kruscht

vector <int> meinVektor;
vector <vector <int> > deinVektor; // SPACE zwischen den > > MUSS hin, weil das sonst als Stream annimmt

Rest kann selbstaendig in der MSDN nachgeschlagen werden.

Persönliche Werkzeuge