Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Theoretische Informatik » Automatentheorie » C++Aufgabe » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Seiten (2): [1] 2 nächste » Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen C++Aufgabe
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
ccc
unregistriert
C++Aufgabe Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:


class CMeasurement
{
private:
long m_datetime; // Messzeitpunkt in Millisekunden seit 1.2.2011 0:00
float m_power; // Gemessene Leistung in Watt
public:
//Konstruktor
CMeasurement(long datetime, float power);
CMeasurement();
void print();
};
class CConsumptionLog
{
private:
CMeasurement* m_entries; // Array mit den Messwerten
long m_maxEntries; // Größe des Array mit den Messwerten
long m_loggedEntries; // Aktuelle Anzahl von Messwerten im Array
public:
void addEntry(long datetime, float power);
void clearLogEntries();
void print();
};


















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?
09.04.2015 23:26
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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:
code:
1:
2:
3:
long getDatetime();


Richtig wäre also:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
class CMeasurement
{
	private:
		long m_datetime; // Messzeitpunkt in Millisekunden seit 1.2.2011 0:00
		float m_power; // Gemessene Leistung in Watt
	public:
		//Konstruktor
		CMeasurement(long datetime, float power);
		CMeasurement();
		void print();
		long getDatetime(){
			return m_datetime;
		}
		float getPower(){
			return m_power;
		}
};


Gruß,

Karlito
10.04.2015 15:47 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
ccc
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.)

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:

CConsumptionLog::CConsumptionLog(long maxEntries,){

m_maxEntries = maxEntries;

maxEntries = 100;


}



Ist der Konstruktor so richtig?
11.04.2015 13:21
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

code:
1:
2:
3:
CConsumptionLog::CConsumptionLog(long maxEntries = 100) {
    m_maxEntries = maxEntries;
}


__________________
Syntax Highlighting fürs Board (Link)
11.04.2015 13:38 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 13:43 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
ccc
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

@eulersche Zahl

Muss man den default Wert immer in der runden Klammer definieren ?
11.04.2015 16:49
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Mir ist zumindest keine andere Möglichkeit bekannt.

__________________
Syntax Highlighting fürs Board (Link)
11.04.2015 20:26 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
ccc
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Was muss man den genau beim Copy Konstruktor beachten ?
11.04.2015 22:46
ccc
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

So?


code:
1:
2:
3:
4:
5:
6:
7:
CConsumptionLog::CConsumptionLog(long maxEntries = 100) {
    m_maxEntries = origin.maxEntries;
}


11.04.2015 22:51
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Nein, dem Copy Konstruktor musst du ein CConsumptionLog& übergeben.

__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 12.04.2015 08:05.

12.04.2015 08:05 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
ccc
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

code:
1:
2:
3:
4:
5:
6:
7:
8:

CConsumptionLog&::CConsumptionLog(long maxEntries = 100) {
    m_maxEntries = origin.maxEntries;
}




Richtig?
12.04.2015 12:17
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

code:
1:
2:
3:
CConsumptionLog::CConsumptionLog(CConsumptionLog& origin) {
    this->m_maxEntries = origin.maxEntries;
}


__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 14.04.2015 16:59.

12.04.2015 18:07 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
ccc
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Wieso kommt da plötzlich ein this her ?
12.04.2015 18:17
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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:
code:
1:
2:
3:
CConsumptionLog::CConsumptionLog(long maxEntries = 100) {
    this->maxEntries = maxEntries;
}


__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 14.04.2015 16:59.

12.04.2015 18:31 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
ccc
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Im destruktor einfach delete maxEntries,

einfügen ?
12.04.2015 18:40
Seiten (2): [1] 2 nächste » Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Theoretische Informatik » Automatentheorie » C++Aufgabe