Übung Datenstrukturen Objektorientierung in C++
Aufgabe 1a - Farben Schreiben Sie eine Klasse COLOR zur Beschreibung von Farben. Eine Farbe werde hierbei additiv durch ihren Rot-, Grün- und Blauanteil definiert. Der Anteil jeder Farbe soll durch eine ganze Zahl im Intervall [0,255] ausgedrückt werden. Bei Erzeugung eines Objektes ist sicherzustellen, dass ein Farbwert im erlaubten Bereich liegt. Unterschreitet er diesen, ist der Farbanteil auf 0 zu setzen und bei Überschreitung auf 255. Definieren Sie einen Standardkonstruktor, der sowohl Rot- als auch Grün- und Blauanteil mit 0 initialisiert. Ergänzen Sie einen parametrisierten Konstruktor, bei dem Sie die jeweiligen Farbanteile direkt festlegen können. Schreiben Sie eine Methode print(), die die Werte aller Farbanteile auf dem Bildschirm ausgibt
Aufgabe 1b - Punkte Erzeugen Sie eine Klasse POINT zur Darstellung von Punkten im zweidimensionalen Raum! Definieren Sie einen Standardkonstruktor, der x- und y-koordinaten mit 0 initialisiert. Ergänzen Sie einen parametrisierten Konstruktor, der x- und y-koordinaten mit den angegebenen Werten initialisiert. Schreiben Sie Getter-Methoden, die die Werte der Koordinaten einzeln zurückliefern Schreiben Sie eine Methode print(), die die Werte der Koordinaten auf dem Bildschirm ausgibt Schreiben Sie eine Methode double distance(), die den Abstand Ihres Punktes vom Koordinatenursprung berechnet und als Funktionswert zurückliefert. Hinweise Sie dürfen zur Abstandsberechnung die Funktion sqrt() aus <math.h> verwenden Der Datentyp für die Koordinaten ist nicht vorgeschrieben. Sie können auch int verwenden
Aufgabe 1c - 3D-Punkte Leiten Sie von POINT eine Klasse POINT3D zur Darstellung von Punkten im dreidimensionalen Raum ab! Welche Änderungen müssen Sie an der Klasse POINT vornehmen, damit Sie Struktur und Funktionalität aus POINT sinnvoll in POINT3D wiederverwenden können? Definieren Sie einen Standardkonstruktor, der die x-, y- und z-koordinaten mit 0 initialisiert. Ergänzen Sie einen parametrisierten Konstruktor, der x-, y- und z-koordinaten mit den angegebenen Werten initialisiert. Schreiben Sie Getter-Methoden, die die Werte der Koordinaten einzeln zurückliefern Schreiben Sie eine Methode print(), die die Werte aller Koordinaten auf dem Bildschirm ausgibt Schreiben Sie eine Methode double distance(), die den Abstand Ihres Punktes zum Koordinatenursprung berechnet und als Funktionswert zurückliefert. Hinweise Versuchen Sie grundsätzlich Struktur und bereits implementierte Funktionalität der Oberklasse weitestgehend wiederzuverwenden!
Aufgabe 1d - Farbige Punkte Erstellen Sie eine Klasse COLORPOINT, mit deren Hilfe Sie farbige Punkte im zweidimensionalen Raum beschreiben können sowie eine Klasse COLORPOINT3D, um farbige Punkte im dreidimensionalen Raum beschreiben zu können! Definieren Sie einen Standardkonstruktor, der sowohl die Punktkoordinaten als auch die Farbanteile mit 0 initialisiert Ergänzen Sie einen parametrisierten Konstruktor, der die Koordinaten und Farbanteile mit den angegebenen Werten initialisiert. Schreiben Sie eine Methode print(), die die Koordinaten und die Farbanteile auf dem Bildschirm ausgibt Hinweise Objekte der beiden zu erzeugenden Klassen sollen auch über Getter-Methoden für die Koordinaten sowie die distance()-methode verfügen. Versuchen Sie grundsätzlich bereits implementierte Strukturen und Funktionalität weitestgehend wiederzuverwenden!
Aufgabe 1e - Anwendung Sie möchten N beliebige Punkte (Objekte der in den Aufgaben 1b bis 1d erstellten Klassen) in einem Feld mit N Elementen abspeichern. Welchen Typ muss das Feld haben? Schreiben Sie eine Funktion, die für ein solches Feld die durchschnittliche Distanz aller Punkte zum Koordinatenursprung berechnen kann. Erzeugen Sie ein solches Feld mit acht Elementen und füllen Sie es mit je zwei Vertretern der erzeugen Punktklassen, jeweils einmal mit Standardkonstruktor und einmal mit parametrisiertem Konstruktor (mit beliebigen Werten) initialisiert. Geben Sie alle Punkte des Feldes sowie deren Entfernung vom Koordinatenursprung auf dem Bildschirm aus! Berechnen Sie die durchschnittliche Entfernung aller Punktobjekte Ihres Feldes zum Koordinatenursprung und geben Sie diese auf dem Bildschirm aus!
Zusatzaufgabe Schreiben Sie eine Klasse LINE zur Darstellung von Strecken im zweidimensionalen Raum. Eine Strecke werde hierbei durch zwei Punkte der Klasse POINT begrenzt. Realisieren Sie einen Standardkonstruktor, der die Koordinaten der beteiligten Punkte mit 0 initialisiert. Implementieren Sie einen parametrisierten Konstruktor, der die beiden Punkte mit den übergebenen Koordinaten initialisiert. Entwickeln Sie eine Methode length(), die die Länge der Strecke berechnet sowie eine Methode print(), um die Koordinaten der beteiligten Punkte auszugeben. Schreiben Sie eine Klasse COLORLINE zur Darstellung von farbigen Strecken mit gleichem Funktionsumfang. Hinweise Sie dürfen zur Abstandsberechnung die Funktion sqrt() aus <math.h> verwenden Versuchen Sie auch hier, bereits implementierte Strukturen und Funktionalität weitestgehend wiederzuverwenden!
Aufgabe 2a - String Erstellen Sie eine Klasse String, zur Darstellung und Verarbeitung von Zeichenketten und implementieren Sie folgende Methoden: Standardkonstruktor, der einen leeren String initialisiert Kopierkonstruktor Parametrisierter Konstruktor mit C-Zeichenkette als Argument Destruktor Zuweisungsoperator (=), der einem String sowohl eine C-Zeichenkette als auch den Inhalt eines anderen Strings zuweisen kann isequal - Vergleicht den Inhalt zweier Strings und gibt bei Übereinstimmung true zurück und sonst false getstr - liefert den Inhalt des Strings als C-Zeichenkette zurück getlength - liefert die Anzahl der Zeichen des Strings zurück print - gibt den String auf dem Bildschirm aus
Aufgabe 2 String Leiten Sie von der Klasse String eine Klasse UpperString ab, die die gleiche Funktionalität wie String aufweist, in deren Instanzen jedoch alle Kleinbuchstaben durch Großbuchstaben ersetzt sind. Sorgen Sie dafür, dass Zuweisungen und Vergleiche zwischen den Klassen String und UpperString möglich sind. Testen Sie die Funktionalität beider Klassen!