C++Aufgabe |
09.04.2015, 23:26 | Auf diesen Beitrag antworten » | ||||||||||||||
ccc | C++Aufgabe Hallo ich habe gerade probleme bei dieser Aufgabe: Gegeben seien folgende (unvollständige) Klassendefinitionen. Die Klassen sollen ein Protokoll verbrauchter elektrischer Leistung realisieren. Dabei stellt die Klasse CMeasurement die Protokolleinträge dar, die Klasse CConsumptionLog modelliert das Protokoll. Neue Einträge werden von einer Messeinrichtung durch Aufruf der Methode addEntry zum Protokoll hinzugefügt, wenn sich die gemessene Leistung ändert. Im Protokolleintrag bezeichnet datetime den Zeitpunkt der Messung und power die gemessene Leistung. Die in einem Protokolleintrag angegebene Leistung wird also ab dem zugehörigen Zeitpunkt solange konstant verbraucht, bis über einen erneuten Aufruf der Methode addEntry neue Werte gemeldet werden. Der Messzeitpunkt wird in Millisekunden seit einem fest definierten Startzeitpunkt angegeben, z.B. seit dem 1.2.2011
a) Mit der aktuell für CMeasurement definierten Schnittstelle können Sie neue Objekte erzeugen, aber auf die Werte in den Objekten nicht zugreifen. Ergänzen Sie in der Klassendefinition Methoden, die Ihnen Messzeitpunkt (m_datetime) und Leistung (m_power) als Rückgabewerte liefern. (Tragen Sie die Ergänzungen direkt in obige Klassendefinition ein.) Wie soll ich genau bei der a) vorgehen ? Meine idee long get datetime(){ return m_datetime; } Richtig? |
||||||||||||||
|
|||||||||||||||
10.04.2015, 15:47 | Auf diesen Beitrag antworten » | ||||||||||||||
Karlito | Hallo ccc, damit eine Methode einen Wert zurückgibt, reicht es den Rückgabetypen anzugeben und den Wert dann mit return den Wert zurückzugeben. Das get wird nicht benötigt und ist an dieser Stelle sogar falsch. Sinnvoll ist, das get als Teil des Namens für den getter zu verwenden, also:
Richtig wäre also:
Gruß, Karlito |
||||||||||||||
11.04.2015, 13:21 | Auf diesen Beitrag antworten » | ||||||||||||||
ccc | b) Ergänzen Sie die gegebene Klassendefinition von CConsumptionLog um einen Konstruktor, der es ermöglichen soll, optional die initiale Größe des Arrays mit Messwerten zu setzen. Die Default-Größe (keine Größe angegeben) soll 100 Elemente sein. Ergänzen Sie in der Klassendefinition außerdem den Copy-Konstruktor sowie den Destruktor. (Tragen Sie die Ergänzungen direkt in obige Klassendefinition ein.)
Ist der Konstruktor so richtig? |
||||||||||||||
11.04.2015, 13:38 | Auf diesen Beitrag antworten » | ||||||||||||||
eulerscheZahl |
|
||||||||||||||
Anzeige | |||||||||||||||
|
|||||||||||||||
11.04.2015, 13:43 | Auf diesen Beitrag antworten » | ||||||||||||||
Karlito | Wenn der Konstruktor in der Klassendefinition selbst mit angegeben wird, muss man dann den Scope nicht weg lassen? Ich glaube die Aufgabenstellung besagt, dass direkt in der Klassendefinition gearbeitet werden soll (siehe a)). Außerdem: sollte das Array für dei Messwerte nicht gleich mit initialisiert werden? Gruß, Karlito |
||||||||||||||
11.04.2015, 16:49 | Auf diesen Beitrag antworten » | ||||||||||||||
ccc | @eulersche Zahl Muss man den default Wert immer in der runden Klammer definieren ? |
||||||||||||||
11.04.2015, 20:26 | Auf diesen Beitrag antworten » | ||||||||||||||
eulerscheZahl | Mir ist zumindest keine andere Möglichkeit bekannt. |
||||||||||||||
11.04.2015, 22:46 | Auf diesen Beitrag antworten » | ||||||||||||||
ccc | Was muss man den genau beim Copy Konstruktor beachten ? |
||||||||||||||
11.04.2015, 22:51 | Auf diesen Beitrag antworten » | ||||||||||||||
ccc | So?
|
||||||||||||||
12.04.2015, 08:05 | Auf diesen Beitrag antworten » | ||||||||||||||
eulerscheZahl | Nein, dem Copy Konstruktor musst du ein CConsumptionLog& übergeben. |
||||||||||||||
12.04.2015, 12:17 | Auf diesen Beitrag antworten » | ||||||||||||||
ccc |
Richtig? |
||||||||||||||
12.04.2015, 18:07 | Auf diesen Beitrag antworten » | ||||||||||||||
eulerscheZahl |
|
||||||||||||||
12.04.2015, 18:17 | Auf diesen Beitrag antworten » | ||||||||||||||
ccc | Wieso kommt da plötzlich ein this her ? |
||||||||||||||
12.04.2015, 18:31 | Auf diesen Beitrag antworten » | ||||||||||||||
eulerscheZahl | this sagt einfach, dass es sich um die aktuelle Instanz der Klasse handelt. Es funktioniert zwar auch ohne, aber die Lesbarkeit wird meiner Meinung nach erhöht, da du so klar machst: die aktuelle Instanz nimmt den Wert von der anderen. Würdest du die Klassenvariable nicht m_maxEntries nennen, sondern maxEntries, brächtest du hier zwingend ein this, um das klarzumachen:
|
||||||||||||||
12.04.2015, 18:40 | Auf diesen Beitrag antworten » | ||||||||||||||
ccc | Im destruktor einfach delete maxEntries, einfügen ? |
||||||||||||||
12.04.2015, 18:55 | Auf diesen Beitrag antworten » | ||||||||||||||
eulerscheZahl | Ich habe mir jetzt mal die Aufgabenstellung angeschaut: im Konstruktor musst du noch Speicherplatz für die Einträge (m_entries) anlegen. Den musst du dann im Destruktor auch wieder freigeben. |
||||||||||||||
12.04.2015, 21:05 | Auf diesen Beitrag antworten » | ||||||||||||||
ccc | Wie legt man Speicherplatz an ? |
||||||||||||||
13.04.2015, 16:02 | Auf diesen Beitrag antworten » | ||||||||||||||
eulerscheZahl |
Das musst du dann mit delete wieder löschen. |
||||||||||||||
14.04.2015, 13:53 | Auf diesen Beitrag antworten » | ||||||||||||||
ccc |
Geht das so? War mir nicht sicher ob ich logged Entries oder max Entries löschen sollte ? |
||||||||||||||
14.04.2015, 16:59 | Auf diesen Beitrag antworten » | ||||||||||||||
eulerscheZahl | Du musst den Speicher wieder freigeben, den du im Konstruktor dynamisch allokiert hast, also m_loggedEntries. Und da es sich um ein Array handelt, solltest du delete[] verwenden. PS: Karlito hat mich darauf hingewiesen, dass es this-> heißen muss, statt this., wenn man auf die Felder zugreifen will. |
||||||||||||||
15.04.2015, 01:05 | Auf diesen Beitrag antworten » | ||||||||||||||
ccc | Zeichnen Sie das UML-Klassendiagramm der Klasse CConsumptionLog (mit Initialwerten, Defaultwerten und Zusicherungen) auf der Grundlage der in Aufgabenteil b) ergänzten Klassendefinition. Verwenden Sie den hier dafür vorgesehenen Platz
Wisst ihr wie man so ein UML Diagramm erstellt ? |
||||||||||||||
15.04.2015, 13:55 | Auf diesen Beitrag antworten » | ||||||||||||||
Karlito |
Ist falsch.
Ja. Schau dir einfach den Wikipedia-Artikel an und mache einen Vorschlag. Wir schauen dann drüber. Gruß, Karlito |
||||||||||||||
15.04.2015, 19:39 | Auf diesen Beitrag antworten » | ||||||||||||||
ccc | Wieso schreibt ihr da nur m_entries ? |
||||||||||||||
15.04.2015, 21:25 | Auf diesen Beitrag antworten » | ||||||||||||||
Karlito | Weil m_logEntries vom Typ long ist und die aktuelle Anzahl an Datensätzen vorhalten soll. m_Entries hingegen ist das Array mit den Datensätzen. Das ist es, was reserviert und auch freigegeben werden muss. Ich glaube da war ein Fehler bei euler. Du solltest das Programm auch mal probieren. Gruß, Karlito |
|
Verwandte Themen
Die Beliebtesten » |
Die Größten » |
Die Neuesten » |
|