Konstruktor



  • 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?



  • ach stimmt 😃 mir war gar nicht bewusst das es hier einfach überladen wird.
    Und ich hirni hab vergessen void fluessig:: davor zu schreiben. ich muss blind gewesen sein. 🙄



  • Noch zur Richtigkeit: Du tusts nichts überladen hier. 😉
    Sondern du redefinierst die Methode in der abgeleitenen Klasse und "versteckts" daher auch die Baisklassemethode, die du direkt nun nicht mehr aufrufen kannst.


Anmelden zum Antworten