Algemeine Fragen zur CPP
-
Hallo
Ich lerne gerade CPP und hab da ein paar probleme.
Kann mir jemand den folgenden Code erkläre.CODE :
#include "stdio.h"
#include "string.h"class testKlasse
{
public:
testKlasse();
~testKlasse();int a;
char str[255];
};testKlasse::testKlasse()
{
a = 0;
strcpy(str, "Konstruktor");
printf("Konstruktor von \"%d\"\n", this);
}testKlasse::~testKlasse()
{
printf("Destruktor von \"%d\" wert=\"%d\"\n", this, a);
a = -1;
strcpy(str, "Destruktor");
}void main()
{
testKlasse tk;printf("VOR IF1 a = %d str = %s\n", tk.a, tk.str);
if(1)
{
testKlasse tmp;
tmp.a = 1;
tk = tmp;printf("IN IF1 a = %d str = %s\n", tk.a, tk.str);
}printf("NACH IF1 a = %d str = %s\n", tk.a, tk.str);
printf("\n\n\n\n");
printf("VOR IF2 a = %d str = %s\n", tk.a, tk.str);
if(2)
{
//Hier wird der Konstruktor vor das neue Object
//aufgerufen und danach der Destructor von dem
//neuen Object. Ich hätte erwartet, das als
//erstes der Destructor für das alte Object
//aufgerufen wird und danach der Konstruktor für
//das neue Object.
tk = testKlasse();//Warum ist hier tk.a == 0
printf("IN IF2 a = %d str = %s\n", tk.a, tk.str);}
printf("NACH IF2 a = %d str = %s\n", tk.a, tk.str);
}AUSGABE :
Konstruktor von "1244784"
VOR IF1 a = 0 str = Konstruktor
Konstruktor von "1244524"
IN IF1 a = 1 str = Konstruktor
Destruktor von "1244524" wert="1"
NACH IF1 a = 1 str = KonstruktorVOR IF2 a = 1 str = Konstruktor
Konstruktor von "1244264"
Destruktor von "1244264" wert="0"
IN IF2 a = 0 str = Konstruktor
NACH IF2 a = 0 str = Konstruktor
Destruktor von "1244784" wert="0"
-
Das ist zu 90% C, kein C++. printf ist C, strcpy ist C, das macht man so nicht in C++, man verwendet std::string.
Einfach
#include <string> // wirklich ohne .h #include <iostream> using namespace std; int main() { string text1= "Hallo"; string text2 = "Welt"; string gesamt = text1 + ", " + text2; cout << gesamt << endl; }
Nebenbei: sfds
MfG Jester
-
Das mag sein das es zu 90% C ist. Und das ich statt strcpy string benutzen sollte. Mein Problem war allerdings was anderes. Ich verstehe nich das mit dem Destruktor.
[code]
if(2)
{
//Hier wird der Konstruktor vor das neue Object
//aufgerufen und danach der Destructor von dem
//neuen Object. Ich hätte erwartet, das als
//erstes der Destructor für das alte Object
//aufgerufen wird und danach der Konstruktor für
//das neue Object.
tk = testKlasse();//Warum ist hier tk.a == 0
printf("IN IF2 a = %d str = %s\n", tk.a, tk.str);}