Von primitiven Datentypen zu komplexen Datenstrukturen

Standard Datentypen alleine ungeschickt bzw. unzureichend für praktische Anwendungen, z.B. Studentendaten: In C++ mittels struct oder einfacher Form von Klasse möglich solche Datenstrukturen selbst zu definieren:


class Stud1 { // einfache Klasse fuer Studenten-Daten
public:
  string name, fach;  
  int semester, alter;
  double diplomnoten[4];
     ...
};  // end of class definiton
 ...
    // Anwendung
 Stud1 sta;  // Erzeugung Variable vom typ Stud1
 sta.name = "Albert Unirock";
 sta.fach = "Physik";
 sta.alter = 25;
 ...
 Stud1 stb;  // Erzeugung Variable vom typ Stud1
 stb.name = "Berta Bohne";
 stb.fach = "Informatik";
 stb.alter = 19;
 ...


Weiteres Beispiel: Klasse für einfachen Dreier-Vektor


class Dumb3Vec { // einfache Klasse fuer 3-er Vektoren
public:
  double x, y, z;
};  // end of class definition
...
// Anwendung
Dumb3Vec v;  // Erzeugung Variable vom typ Dumb3Vec
Dumb3Vec w;  // Erzeugung Variable vom typ Dumb3Vec
v.x = 1.0; v.y = 0.5; v.z = -0.8;
w.x = 1.5; w.y = -0.5; w.z = -2.8;
...
// Laenge ausrechnen
double len = sqrt(v.x*v.x + v.y*v.y + v.z*v.z ); 
Dumb3Vec u;
// u und v addieren
u.x = v.x + w.x; 
u.y = v.y + w.y; 
u.z = v.z + w.z; 
...


Anstatt gängige Operationen jedesmal wieder neu zu programmieren wäre es geschickt wenn dies gleich die Klasse übernehmen könnte:


class Smart3Vec { // Klasse fuer 3-er Vektoren mit Methoden
public:
  double x, y, z; // member variables
  double Length() {
    return( sqrt(x*x + y*y + z*z ));
  };
  Smart3Vec Add( Smart3Vec a ) {
    Smart3Vec t;
    t.x = x + a.x;
    t.y = y + a.y;
    t.z = z + a.z;
    return(t);
  };
};  // end of class definiton
//...
// Anwendung
int main() 
{
  Smart3Vec v;  // Erzeugung Variable vom typ Smart3Vec
  Smart3Vec w;  // Erzeugung Variable vom typ Smart3Vec
  v.x = 1.0; v.y = 0.5; v.z = -0.8;
  w.x = 1.5; w.y = -0.5; w.z = -2.8;
  //...
  // v kann seine Laenge selbst ausrechnen ...
  double len = v.Length();
  // ... und weiss auch wie es einen anderen Vektor addiert
  Smart3Vec u = v.Add(w);
  // ...
}


Klassen nicht nur zum Definieren beliebiger Datenstrukturen sondern auch gleich Operationen bzw. Methoden mit diesen Daten
\bgroup\color{green}\ensuremath{\Rightarrow}\egroup Grundkonzept für Objektorientiertes Programmieren


GDuckeck 2019-08-01