C++ Revisited

Die Schoenheit des Programmierens

...in der Informatik erschaffst du die Welt selber. Innerhalb der Grenzen deines Computers bist du der Schoepfer....Wenn du gut genug bist, kannst du Gott sein...

...Programmieren ist eine Uebung in Kreativitaet...

...Mit der Informatik ist es wie mit der Mathematik: Ein grosser Mathematiker waehlt nich den umstaendlichen, langweiligen Weg. Stattdessen erkennt er das eigentliche Muster, das einer Frage zugrunde liegt, und nutzt es, um einen viel besseren Loesungsweg einzuschlagen.

- Linus Torvalds

C++ Revisited

Datentypen

Strukturen

Klassen/ Objekte

Spezialitaeten bei der Funnktionsdefinition

Ableitungen

Virtuelle Funktionen

Forward Declaration

Uebersicht:

C++ Revisited

Datentypen

Datentyp	Bitzahl	Wertebereich

char	8	0...255

short	8	-128...127

int	16	-32768...32767

long	32	-2147483648...2147483647

float	32	3.4*10-38...3.4*10-38

double	64	1.7*10-308...1.7*10308

bool	8	1 || 2

C++ Revisited

Strukturen sind einfache Klassen:

ohne Zugriffmodifikator {public, protected, private}

ohne Konstruktoren z.B Object::Object()

ohne Vererbungsmoeglichkeiten (steril :) )

struct Vector2D {

int x; //<! x - coordinate

int y; //<! y - coorinate

};

struct Vector2D vector; //<! new variable vector

typedef struct Vector2D {

...

};

Vector2D vector; //<! typedefs are cooler...

Strukturen

C++ Revisited

Klassen und Objekte

Aufbau ist aehnlich eines structes:

class BeispielKlasse {

public:

BeispielKlasse(); // constructor prototype

~BeispielKlasse(); // deconstructor

void function(); // function

private:

float allVariablesArePrivate; // private variable

};

BeispielKlasse::BeispielKlasse() {} // empty constructor

void BeispielKlasse::function() // function

{

this->allVariablesArePrivate = 0.0; // use this

}

C++ Revisited

Klassen und Objekte

Erzeugen eines Objektes aus einer Klasse:

BeispielKlasse* klasse = new BeispielKlasse();

klasse->function();

//or

BeispielKlasse klasse;

klasse.function();

//or

BeispielKlasse klasse();

klasse.function();

C++ Revisited

Spezielle Funktionsedinitionen

Standardwerte:

class Vector {

public:

Vector(x = 0.0, y = 0.0, z = 0.0);

private:

float x, y, z;

};

Vector v = new Vector(); // == Vector v = new Vector(0.0, 0.0, 0.0);

Konstante Parameter Call by Reference:

Vector Vector::cross (const Vector& v) {}

Vector v(1.0, 5.2, 0.5);

v.cross(v);

C++ Revisited

Ableitungen

class WorldEntity {

public: void function();

protected: char* name;

private: int val;

};

class Player : public WorldEntity

{

Player();

};

Player::Player() : WorldEntity()

{

this->function() // this works

this->name = new char[4]; // this works :D

this->val = 5; // NO GOOD

}

C++ Revisited

Virtuelle Funktionen

Immer die zu einem Objekt gehoerende Funktion aufrufen:

class WorldEntity {

virtual void tick(float time);

};

void WorldEntity::tick(float time) { /* stuff */ }

class Weapon {

virtual void tick(float time);

};

void Weapon::tick(float time) { /* stuff */ }

WorldEntity* we = new WorldEntity()

we->tick(3.5);

we = new Weapon();

we->tick(3.5);

C++ Revisited

Forward Declaration

In Header files, z.B: WorldEntity.h

class CharacterAttributes;

class WorldEntity : public Pnode{

public:

void setCharAttr(CharacterAttributes* attr);

CharacterAttributes* getCharAttr();

private:

CharacterAttributes* attr;

};

C++ Revisited

It can't get Harder than this:

class Vector {

public:

float x; //!< The x Coordinate of the Vector.

float y; //!< The y Coordinate of the Vector.

float z; //!< The z Coordinate of the Vector.

Vector (float x, float y, float z) : x(x), y(y), z(z) {}

Vector () : x(0), y(0), z(0) {}

~Vector () {}

Vector operator+ (const Vector& v) const;

Vector operator- (const Vector& v) const;

Vector operator/ (float f) const;

float dot (const Vector& v) const;

};

2005-03-09T16:57:33