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 = Konstruktor

    VOR 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);

    }


Anmelden zum Antworten