Furi
Lt. Junior Grade
- Registriert
- Okt. 2008
- Beiträge
- 392
Hi @ all,
bin grade am Lernen und hab zu diesem einfachen Stück Code ein paar Fragen:
Ich denke mal, der Code dürfte für die meisten hier recht selbsterklärend sein.
Folgende Fragen hätte ich dabei an euch:
Bitte nicht falsch verstehen, ich möchte nicht faul sein und meine Fragen auf das Forum abwälzen. Nur meistens wenn ich nach C(++)-Problemen google, bekomm ich nicht die Antworten die ich will, oder Antworten zur gleichen Frage aber mit komplett anderer Ursache Vielleicht einfach nur zu blöd zum googlen, wer weiss...
Vielen Dank schonmal,
Furi
bin grade am Lernen und hab zu diesem einfachen Stück Code ein paar Fragen:
Code:
#include <iostream>
using namespace std;
int counter=0; //Globaler Zähler für Konstruktoraufrufe
class complex{
private:
float *real;
float *imag;
public:
complex(){ //Konstruktor ohne Parameter
real = new float;
*real = 0.0;
imag = new float;
*imag = 0.0;
counter++;
}
complex(float r, float i){ //Konstruktor mit Parametern
real = new float;
*real = r;
imag = new float;
*imag = i;
counter++;
}
complex(complex ©){ //Kopierkonstruktor mit Call-by-Reference
real = new float;
real = copy.real;
imag = new float;
imag = copy.imag;
counter++;
}
/*complex(complex *copy){ //Kopierkonstruktor mit Pointer
counter++;
real = new float;
real = copy->real;
imag = new float;
imag = copy->imag;
}*/
~complex(){
imag = NULL;
real = NULL;
}
void delete_from_heap(){
delete imag;
delete real;
}
void ausgabe(){
cout << *real << "+i" << *imag << endl;
cout << "Counter: " << counter << " ";
}
};
int main(){
complex a;
a.ausgabe();
cout << endl << endl;
complex b(4.3,5.7);
b.ausgabe();
cout << endl << endl;
complex c(b);
c.ausgabe();
cout << endl << endl;
//complex d = new complex;
c.delete_from_heap();
//b.delete_from_heap();
a.delete_from_heap();
return 0;
}
Ich denke mal, der Code dürfte für die meisten hier recht selbsterklärend sein.
Folgende Fragen hätte ich dabei an euch:
- Ich hatte mich gewundert, dass der Destruktor, in welchem vorher "delete real; delete imag;" stand, das Programm zum Absturz laufen lässt. Dazu habe ich mir die Funktion "delete_from_heap" angelegt und gesehen, dass die "b"-Instanz, welche den Konstruktor mit einfachen Parametern nutzt, schuld am Absturz ist. Ich kann aber in diesem Konstruktor imag und real gleich mit delete wieder löschen, ohne dass es zum Absturz kommt. (Der Wert der beiden Variablen ist dann natürlich sinnlos, aber es funktioniert). Warum ist das so und wie kann ich es beheben, da mir dadurch ja der Destruktor seinen Sinn verliert und die Elemente/Objekte ja auf dem Heap verbleiben ?!
- Woher weiss der Compiler, welchen der beiden Konstruktoren er für die Instanz "c" hernehmen soll, wenn keiner von denen auskommentiert ist ?
- Warum wird bei Verwendung des Konstruktors mit Pointer als Parameter die globale Variable (counter) nicht erhöht ?
- Eigentlich kann ich es mir schon denken, aber warum funktioniert Zeile 69 nicht ?
Bitte nicht falsch verstehen, ich möchte nicht faul sein und meine Fragen auf das Forum abwälzen. Nur meistens wenn ich nach C(++)-Problemen google, bekomm ich nicht die Antworten die ich will, oder Antworten zur gleichen Frage aber mit komplett anderer Ursache Vielleicht einfach nur zu blöd zum googlen, wer weiss...
Vielen Dank schonmal,
Furi
Zuletzt bearbeitet: