Erschaffen wir uns einen zweidimensionalen Vektor (engl. vertex). Eine kurze Erklärung zu Vektormathematik gibt es hier. Das Projekt steht hier zum Download.
Header-Datei vertex.h:
{
CVertex();
~CVertex();
CVertex add(CVertex v
};
Es gibt verschiedene Namenskonventionen bei der
Benennung von
Typen, Methoden
und Attributen. Hier wurden der Lesbarkeit halber nur ein
großes
Um unsere erste Klasse sehr einfach zu halten, sind alle
Elemente
Der Konstruktor einer Klasse dient dazu, die Attribute des Objekts auf Standardwerte zu setzen, also zu initialisieren. Der Destruktor dient dazu, bei Löschen des Objektes aufzuräumen, z.B. falls das Objekt dynamisch Speicher belegt hat.
Beim Erzeugen eines Objekts wird automatisch der Konstruktor aufgerufen, bei Verlassen des Blocks, in dem das Objekt gültig ist, der Destruktor. Beide wurden eingeführt, da sich sonst Programmierfehler durch nicht initialisierte oder korrekt aufgeräumte Attribute einschleichen würden.
Dem Konstruktor können weitere Parameter übergeben werden. In unserem Fall reicht aber der sogenannte Standardkonstruktor. Da der Destruktor automatisch aufgerufen wird, können keine Parameter an ihn übergeben werden.
In der Header-Datei haben wir, wie gesagt, die Klasse mit ihren Funktionen und Attributen nur deklariert. Konstruktor, Destruktor und die beiden Methoden
Die Implementierung einer Methode wie z.B.
{
}
Soll nichts
zurückgegeben werden, schreiben wir (wie in apfel.h)
Sehen wir uns die Implementierung in der C++-Datei vertex.cpp an:
CVertex::CVertex()
{
x = y = 0.0f;
}
{
}
{
}
CVertex CVertex::add(
{
CVertex result;
result.x = x + v.x;
result.y = x + v.y;
}
Das ist schon alles.
Auf die Attribute
Verwenden wir die Klasse in main.cpp:
{
CVertex a;
cout << a.length() << endl;
a.x = 1.0f;
a.y = 1.0f;
cout << a.length() << endl;
CVertex b;
b.x = -1.0f;
b.y = 1.0f;
CVertex c = a.add(b);
cout <<
}
Das Programm gibt wie erwartet 0, die Wurzel von zwei und "(0, 2)" aus.
- Programmiere eine Funktion, die einen zweiten Vektor von unserem subtrahiert und das Ergebnis zurückliefert
- Programmiere eine
print Methode, die die Koordinaten des Vektors selbständig aufcout ausgibt. Alle Includes berücksichtigt? - Wann werden Konstruktor und Destruktor aufgerufen?
Gebe im Konstruktor und Destruktor der Vektorklasse etwas aus. Was
passiert in der
add Methode? - Erweitere die Vektorklasse auf die dritte Dimension