Abstrakter Datentyp in C++ I - Klasse - class Vector { private: double x; double y; double z; public: void set (double a, double b, double c); double x_coord (); double y_coord (); double z_coord (); double length (); void smult (double); Vector add (Vector, Vector); double sprod (Vector a); void vprod (Vector a, Vector b); } Programmierung 2 FH Bingen
Klasse II class Classname Klassen-Name { private: ....... public: } Klassen-Name Member: Attribute Methoden Programmierung 2 FH Bingen
Klasse III private member: auf die private members können nur Methoden der Klasse selbst zugreifen. Attribute können nur durch Methoden dieser Klasse gelesen oder manipuliert werden. Methoden können nur durch Methoden dieser Klasse aufgerufen werden. public member: der Zugriff auf die public members ist für alle Methoden zugelassen. Programmierung 2 FH Bingen
Klasse IV - Definition eines Objektes - Vector a; a.x = 0; Vector b; b.set (1, 0, 0); Programmierung 2 FH Bingen
Scope Resolution Operator Klasse V - Methoden - double Vector::set (double a, double b, double c); { x = a; y=b; z = c; } double Vector::x_coord() return x; double Vector::y_coord() return y; double Vector::z_coord() return z; Scope Resolution Operator Programmierung 2 FH Bingen
Klasse VI double Vector::length () { return sqrt (x*x + y*y + z*z); } void Vector::smult (double skalar) x *= skalar; y *= skalar; z *= skalar; Vector Vector::add (Vector a, Vector b) x = a.x + b.x; y = a.y + b.y; z = a.z + b.z; Programmierung 2 FH Bingen
Klasse VII double Vector::sprod (Vector a) { return x*a.x + y*a.y + z*a.z; } void Vector::vprod (Vector a, Vector b) x = a.y*b.z - b.y*a.z; y = -(a.x*b.z - b.x*a.z); z = a.x*b.y - b.x*a.y; Programmierung 2 FH Bingen
Klasse VIII Instanzen der Klasse Vector #include <iostream.h> #include <math.h> void main () { Vector a, b, c; a.set (1, 0, 0); b.set (0, 0, 1); cout << "\nDie Laenge von a = (" << a.x_coord() <<", "<< a.y_coord() << ", " <<a.z_coord() << ") ist " << a.length() << '\n'; // printf ("\nDie Laenge von ( %f, %f, %f ) ist %f\n", a.x_coord(), a.y_coord(), a.z_coord(), a.length()); c.vprod(a,b); cout << "\nDie Laenge von c = (" << c.x_coord() <<", "<< c.y_coord() << ", " << c.z_coord() << ") ist " << c.length() << '\n'; c.add(a, b); } Instanzen der Klasse Vector Programmierung 2 FH Bingen
Klasse IX - Konstruktoren - Lebenszyklus der Instanz einer Klasse: Instantiieren und Initialisieren eines Objektes Benutzen eines Objektes Beseitigen eines Objektes Programmierung 2 FH Bingen
Klasse X - Konstruktor - Ein Konstruktor ist eine Methode. Er kann deshalb auch Parameter tragen. Ein Konstruktor trägt den Namen seiner Klasse. Ein Konstruktor trägt keinen Return-Typ (auch nicht void). Eine Klasse kann mehrere Konstruktoren beinhalten. Programmierung 2 FH Bingen
Klasse XI - Konstruktor - class Vector { private: double x; double y; double z; public: Vector (); Vector (double, double, double); ........................ }; Programmierung 2 FH Bingen
Klasse XII - Konstruktor - Vector::Vector() { x=0; y=0; z=0; } Vector::Vector (double a, double b, double c) x = a; y = b; z = c; Programmierung 2 FH Bingen
Klasse XIII - Konstruktor - void main () { Vector a(1,0,0); Vector b(1,1,1); Vector c; ................................ } Programmierung 2 FH Bingen
Überladen I In C++ dürfen unterschiedliche Funktionen gleichen Namens definiert werden. Diese Funktionen müssen sich in ihrer Parameter-Signatur unterscheiden Programmierung 2 FH Bingen
Überladen II Vector::print ( double x) { cout << "Die Koordinate hat den Wert" << x << '\n'; } Vector::print (Vector a) cout << "Der Vector hat den Wert ( " << a.x << ", " a.y << ", " << a.z << ")\n"; Programmierung 2 FH Bingen
Überladen III main () { Vector a(1, 2, 3); print (a.x_coord); } Programmierung 2 FH Bingen