C++ Kopierkonstruktor / Referenzparameter
Verfasst: Sa Jan 16, 2016 11:09 pm
Hallo liebe Leute,
als erstes kurz über mich.
Ich bin dabei privat als Hobby C / C++ zu lernen bzw. lerne noch dazu momentan C in einer Techniker Schule. Da wird aber das Wissen auf die Mikrokontroller-Technik reduziert.
Da mich das ganze Thema aber weit aus mehr interessiert bin ich dem eigentlichem Lernstoff schon wesentlich voraus.
Nun zur Frage: (C++)
Ich habe ein Verständnisproblem. Es funktioniert, aber ich weiß nicht warum.
Es geht um einen Kopierkonstruktor einer Klasse, und zwar ist dieser mit einem, meiner Meinung nach, Referenzparameter ausgestattet.
Nur um mein Wissen darüber zu bestätigen: Ein Referenzparameter ist an sich ein Zeiger, ergo beinhaltet er als Inhalt eine Adresse, aber es ist für den Compiler eigentlich nur der Inhalt auf dem der Zeiger zeigt interessant.
Das ist der entsprechende Code zum Kopierkonstruktor. Ich hoffe bis dahin hab ich richtig aufgepasst. Kurz zum Programm:
Es sollen simulierte Messwerte in einem allokierten Speicher, dessen Anzahl / Größe vom Benutzer her angegeben werden soll, gespeichert werden. Das ganze soll dann in einem zweiten Objekt kopiert werden.
Das Verständnisproblem was ich nun habe ist: Warum müssen die Sternchen (*) in der vorletzten Zeile sein ?
Ich war eigentlich der Meinung dank des Referenzparameter, insofern er wirklich einer ist, dies nicht mehr erforderlich sei?
Ohne die Sternchen(*) [oder Zugriffsoperatoren] kommen nach dem Destruktor des Kopierten Objektes und vor dem Destruktor des eigentlichen Objektes zu sehr verwirrenden Fehlermeldungen.
Destruktor :
So, ich hoffe das ihr mir Erleuchtung bringen könnt. 
Mit freundlichen Grüßen
Falls es noch erforderlich ist, das wäre die eigentliche Deklaration der Klasse :
als erstes kurz über mich.
Ich bin dabei privat als Hobby C / C++ zu lernen bzw. lerne noch dazu momentan C in einer Techniker Schule. Da wird aber das Wissen auf die Mikrokontroller-Technik reduziert.
Da mich das ganze Thema aber weit aus mehr interessiert bin ich dem eigentlichem Lernstoff schon wesentlich voraus.
Nun zur Frage: (C++)
Ich habe ein Verständnisproblem. Es funktioniert, aber ich weiß nicht warum.
Es geht um einen Kopierkonstruktor einer Klasse, und zwar ist dieser mit einem, meiner Meinung nach, Referenzparameter ausgestattet.
Nur um mein Wissen darüber zu bestätigen: Ein Referenzparameter ist an sich ein Zeiger, ergo beinhaltet er als Inhalt eine Adresse, aber es ist für den Compiler eigentlich nur der Inhalt auf dem der Zeiger zeigt interessant.
Code: Alles auswählen
CMessreihe::CMessreihe(CMessreihe& Quelle)
{
Anzahl = Quelle.Anzahl;
if (!(pMesswert = new float[Anzahl]))
{
cout << RAM_ERROR << endl;
_getch();
exit(1);
}
*pMesswert = *Quelle.pMesswert;
}
Es sollen simulierte Messwerte in einem allokierten Speicher, dessen Anzahl / Größe vom Benutzer her angegeben werden soll, gespeichert werden. Das ganze soll dann in einem zweiten Objekt kopiert werden.
Das Verständnisproblem was ich nun habe ist: Warum müssen die Sternchen (*) in der vorletzten Zeile sein ?
Code: Alles auswählen
*pMesswert = *Quelle.pMesswert;
Ohne die Sternchen(*) [oder Zugriffsoperatoren] kommen nach dem Destruktor des Kopierten Objektes und vor dem Destruktor des eigentlichen Objektes zu sehr verwirrenden Fehlermeldungen.
Destruktor :
Code: Alles auswählen
CMessreihe::~CMessreihe()
{
delete[] pMesswert;
}

Mit freundlichen Grüßen
Falls es noch erforderlich ist, das wäre die eigentliche Deklaration der Klasse :
Code: Alles auswählen
class CMessreihe {
protected:
float *pMesswert;
int Anzahl;
public:
CMessreihe(CMessreihe& K_Messreihe);
CMessreihe(int Anzahl);
~CMessreihe();
void SetWert(int i, float Wert);
float GetWert(int i);
void Mittelwert();
void MinWert();
void MaxWert();
};