Konstruktor



  • Hmm danke für die Rückmeldung. Tja ich weiss einfach net woran des liegt.
    Naja mal kucken. Jetzt weiss ich wenigstens das es net an meinem Programm liegt.

    Edit :
    ah habs gefunden ich hab systempause rausgenommen und
    fflush(stdin);
    getchar();

    einfügt. jetzt funktioniert es. Arg ich hasse solche Fehler.



  • [cpp]
    #include <iostream>
    #include "Schueler.h"
    using namespace std;

    schueler::schueler() {
    alter=0;
    iq=0;
    cout<< "Konstruktor wird aufgerufen" <<endl; //DAZUGEFÜGT
    }
    schueler::~schueler() {
    cout<< "Dekonstruktor wird aufgerufen" <<endl; //DAZUGEFÜGT
    }
    void schueler::zeigedaten() {
    cout << "Alter des Schuelers: " << alter << endl;
    cout << "IQ des Schuelers " << iq << endl;
    }
    [/cpp]

    so ich hab aus dem ersten Beispiel mal was dazugefügt.
    Warum sehe ich aber nur die meldung das der Konstruktor aufgerufen wird und nicht der Dekonstruktor. Oder geht des bei euch?



  • joa eben. das läuft alles. schau in deinem buch mal auf S. 184 🙂

    cu



  • Jop. Wird beides sauber ausgegeben.



  • Jeder Compiler sollte hier den Destruktor der Klasse aufrufen. D.h. es kann nur daran liegen, dass du es nicht siehst. In meinem Posting oben habe ich ja schon bereits geschrieben, wie du es mal versuchen kannst.



  • Du meinst also so

    #include <iostream>
    #include "Schueler.h"
    using namespace std;
    
    schueler::schueler() {
        alter=0;
        iq=0;
        cout<< "Konstruktor wird aufgerufen" <<endl;
    }
    schueler::~schueler() {
        cout<< "Dekonstruktor wird aufgerufen" <<std::endl;
    }        
    void schueler::zeigedaten() {
        cout << "Alter des Schuelers: " << alter << endl;
        cout << "IQ des Schuelers " << iq << endl;
    }
    

    so sehe ich es auch aber auch net. ich verwende des DEV C++ 4.9.9.0



  • tja, dann weiß ich auch nicht weiter. Teste es mal mit einem anderen. Muss aber gehen, du solltest es sehen. Ich habe hier diese IDE nicht, ich bezweifle aber, dass der MinGW etwas anderes macht. 😃



  • Okay trotzdem danke nochmal. 🙂



  • ganz easy problem:
    das programm ruft den destruktor am schluss auf, gibt aus und dann tut er bei deinem Programm nichts mehr
    => tastendruck einfügen
    getch();//dann wartet er auf einen Tastendruck bevor er beendet

    ps: ich würde gerne bei deien IDE Projekt mitarbeiten, hab dir eh schon eine e-mail geschreiben wurde aber irgendwie zurückgeschickt oder ist sie doch bei dir angekommen? (franz111@gmx.at)



  • FranzL. schrieb:

    ganz easy problem:
    das programm ruft den destruktor am schluss auf, gibt aus und dann tut er bei deinem Programm nichts mehr
    => tastendruck einfügen
    getch();//dann wartet er auf einen Tastendruck bevor er beendet

    Das habe ich mir auch schon gedacht. Wer weiß, vielleicht liegs ja daran.. 🙂

    ps: ich würde gerne bei deien IDE Projekt mitarbeiten, hab dir eh schon eine e-mail geschreiben wurde aber irgendwie zurückgeschickt oder ist sie doch bei dir angekommen? (franz111@gmx.at)

    Toll. 🙂 🕶 Nein, bei mir ist nichts von dir angekommen. Schicke es mal bitte nochmal. (siehe neue Kontaktmöglichkeiten auf der Page - es könnte sein, dass du noch an die Alte geschickt hast, die aber durch die neue Serverumstellung nicht mehr gültig ist.)



  • Ich hab hier nochmal eine Frage zu Konstruktoren und zwar von abgeleitenen. Ich versuche gerade des erlernte selber anzuwenden damit es weng besser sitzt.
    Aber ich hab hier ein Problem und ich weiss net so genau woran des liegt. Ich schätze mal an der übergabe zwischen den einzelnen Konstrukoren.

    #ifndef _BASIS_
    #define _BASIS_
    
    class basis {
        private:
            double preis, menge;
            char name[40];
        public:
            basis();
            basis(double a, double b);
            ~basis();
            void setpreis();
            void setmenge();
            void setname();
            void getalldaten();
            };
    #endif
    
    #include <iostream>
    #include <string>
    #include <iomanip>
    #include "basis.h"
    using namespace std;
    
    //SETMETHODEN  
    void basis::setpreis() {
        cout << "Bitte geben Sie den Preis fuer den Artikel ein: ";
        cin >> preis;
        cout << endl;
         }
    void basis::setmenge() {
        cout << "Bitte geben Sie die vorhandene Lagermenge ein: ";
        cin >> menge;
        cout << endl;
    }  
    
    void basis::setname() {
        cout << "Bitte geben Sie den Artikelnamen ein: ";
        cin >> name;
        cout << endl;
    }      
    //GETMETHODEN
    void basis::getalldaten() {
        cout << "Artikelname             = " << name  << endl
             << "Preis des Artikels      = " << preis << " Euro" << endl
             << "Lagermenge des Artikels = " << menge << " Stueck" << endl;
             }    
    
    //KONSTRUKTOREN & DESTRUKTOREN
    basis::basis() {
        preis=0.0;
        menge=0.0;
    }
    
    basis::basis(double a, double b) {
        preis = a;
        menge = b;    
    }
    
    basis::~basis() {
    
    }
    
    #ifndef _FLUESSIG_
    #define _FLUESSIG_
    #include "basis.h"
    
    class fluessig : public basis {
        private:
            double liter;
        public:
            fluessig();
            ~fluessig();
            void setliter();
            void getliter();
        };
    #endif
    
    #include "fluessig.h"
    #include <iostream>
    using namespace std;
    
    void fluessig::setliter() {
        cout << "Bitte geben Sie die Liter des Produktes an: ";
        cin  >>liter;
    }
    
    void fluessig::getliter() {
        cout << "Der Artikel enthaelt " << liter << endl;
    }   
    
    fluessig::fluessig():basis() {
        liter=0;
    
    }    
    fluessig::~fluessig() {
    
    }
    

    mal ne Frage nebenei, habt ihr euch euer Wissen in Programmieren selber angeeignet oder auch durch Studium angeeignet. Würde mich nur mal interessieren.



  • Ich hoffe hier findet sich wer, der mir des leicht erklären kann. Ich checke des net so sehr.



  • Schüler schrieb:

    Ich hab hier nochmal eine Frage zu Konstruktoren und zwar von abgeleitenen. Ich versuche gerade des erlernte selber anzuwenden damit es weng besser sitzt.
    Aber ich hab hier ein Problem und ich weiss net so genau woran des liegt. Ich schätze mal an der übergabe zwischen den einzelnen Konstrukoren.

    Ähm.. Was hast du denn für ein Problem? Compiler-Fehlermeldung?
    Bei mir treten keine auf. Nach logischen Fehler hatte ich aber keien Zeit zu suchen. Raten können wir leider nicht. 😃

    mal ne Frage nebenei, habt ihr euch euer Wissen in Programmieren selber angeeignet oder auch durch Studium angeeignet. Würde mich nur mal interessieren.

    Ich habe mir alles selber angeeignet. Aus Büchern und natürlich übers Internet. Studieren kann ich noch nicht, dazu bin ich noch zu jung. Steck grade mitten in der schriftlichen Prüfung der Realschule. (morgen Englisch Prüfung 😮 😮 )



  • okay habe das Problem gelöst. Ich hätte nur eine andere Frage ich mache deswegen mal kein neues Topic auf sondern schreibe es kurz hier rein, weil auch mein code hier drinnen steht.

    abgeleitete Klasse verwendet Funktion aus Basisklasse -> okay das geht und ist klar

    kann aber die verwendete Funktion noch eine Funktion aus der abgeleiten mit einbauen

    wie z.b.

    //Basisfunktion

    void basis::getalldaten() {
        cout << "Artikelname             = " << name  << endl
             << "Preis des Artikels      = " << preis << " Euro" << endl
             << "Lagermenge des Artikels = " << menge << " Stueck" << endl;
             }
    

    abgeleitete Funktion

    void fluessig::getliter() {
        cout << "Der Artikel enthaelt " << liter << endl;
    }
    


  • Verstehe zwar nich ganz. Aber ich denke du meinst es so, dass du eine neue Funktion in der abgeleitenen Klasse definieren willst. Klar geht das.



  • naja jetzt müsste ich schreiben

    int main () {
    fluessig artikel (129,120,120);
    artikel.getalldaten();
    artikel.getliter();
    

    um die ausgabe aller daten zu haben.Mein frage ist nun wie kann ich des so schreiben das des aller in einer Zeile steht.

    quasi sowas wie

    artikel.getalldaten().getliter(); /*ich weiss das geht net. ich will nur ausdrücken was ich ungefähr meine*/



  • Das kannst du machen, indem du in getalldaten() eine Referenz auf das Objekts zurückgibt, das die Memberfunktion getliter() beinhaltet. (also artikel)
    Aber wozu brauchst du denn das?

    Am Besten du redefenierst getalldaten() in deiner abgeleitenen Klasse und rufst die gibst die extra Dinger einfach aus, die dazu gekommen sind.

    Z.B. ungefähr so:

    void Derived::getAllDaten() {
        Base::getAllDaten();
        std::cout << "Der Artikel enthaelt " << liter << std::endl;
    }
    // Base::getAllDaten() wird überdeckt
    

    Ist doch viel einfacher, nicht? 🕶



  • super genauso sowas hab ich gemeint. So leutet mir des auch ein.
    Hmm ich sinngemäß brauche ich des net im Programm vielleicht. Ich will es halt einfach testen, um zu kucken was ich weiss und wie man was lösen muss. Und durch deine Lösung verstehe ich wieder ein paar Sachen mehr. Dankeschön!!!



  • Hmm hab des mal so probiert aber da bringt er mir jetzt Fehler

    can not call member function void basis::getalldaten() without objekt
    liter undeclared (first use in this function)

    net das du denkst ich wäre faul . ich hab auch nochmal jetzt im Buch gekuckt unter redefenieren aber da wurde des auch so beschrieben wie du sagst. Ich hab auch weng hin und her probiert aber ist immer das selbe.

    hier neuer Code:

    #include "fluessig.h"
    #include <iostream>
    using namespace std;
    
    void fluessig::setliter() {
        cout << "Bitte geben Sie die Liter des Produktes an: ";
        cin  >>liter;
    }
    
    void fluessig::getliter() {
        cout << "Volumen des Artikels    = " << liter << " Liter" << endl;
    }   
    
    fluessig::fluessig(double a, double b, double c) : basis(a, b) { 
        liter=c;
    
    } 
    
    void redgetdaten() {
         basis::getalldaten();
         cout << "Der Artikel enthaelt " << liter << endl; 
    
    }
    
    #ifndef _FLUESSIG_
    #define _FLUESSIG_
    #include "basis.h"
    
    class fluessig : public basis {
        private:
            double liter;
        public:
            fluessig(double a, double b, double c);
            void setliter();
            void getliter();
            void redgetdaten();
            };
    #endif
    


  • void fluessig::redgetdaten() { // hm?
        basis::getalldaten();
        cout << "Der Artikel enthaelt " << liter << endl;
    }
    

    Achja: Und warum nennst du die Funktion nicht einfach gleich?


Anmelden zum Antworten