<vector> als Atribut einer Klasse



  • Wie kann man auf den Atribut "belege" zugreifen ?

    ...

    class CBelegKonto : public CKonto
    {
    private:
    vector<CBeleg> belege;
    public:
    virtual void ausgebenKonto(int position, string strKontoName);
    void setAlleBelege();
    void alleBelege_anzeigen(CBelegKonto alleBelege);

    };
    ...

    void alleBelege_anzeigen( CBelegKonto alleBelege)
    {
    double dSumme=0;

    for(size_t i = 0; i < alleBelege.belege.size(); ++i)
    {
    dSumme += alleBelege.belege[i].anzeigen();
    }
    cout << endl;
    cout << "Summe: " << dSumme << endl;

    system("pause");
    }

    Den Vektor habe ich mit:
    ...

    neueBeleg.setBeleg(buffer);
    alleBelege.belege.insert(alleBelege.belege.end(), neueBeleg);
    ...
    befüllt.
    Einen Vektor kann man nur als Objekt mit insert befüllen.(Oder ?)

    Muss mann da das Schlüsselwort "friend" benutzen ?

    Ich wäre sehr dankbar, wenn mir jemand auch erklären würde, wie man hier die
    C++ Formatierung einfügen kann.( dass void, while, break usw. farbig erscheinen
    usw.)
    Vielen Dank



  • eigentlich: vector<CBeleg> belege

    Ich bitte um Entschuldigung (ist es nicht verständlich ?)
    Darf man die Container in der Klasse verwenden ?

    Trotzdem danke.


  • Mod

    Erst einmal in schön formatiert(Das mach man mit dem C/C++ button unter den Smileys, Einrückung mache ich mal von Hand für dich):

    class CBelegKonto : public CKonto
    {
    private:
     vector<CBeleg> belege;
    public:
     virtual void ausgebenKonto(int position, string strKontoName);
     void setAlleBelege();
     void alleBelege_anzeigen(CBelegKonto alleBelege);
    };
    
    ...
    
    void alleBelege_anzeigen( CBelegKonto alleBelege)
    {
     double dSumme=0;
    
     for(size_t i = 0; i < alleBelege.belege.size(); ++i)
     {
      dSumme += alleBelege.belege[i].anzeigen();
     }
     cout << endl;
     cout << "Summe: " << dSumme << endl;
    
     system("pause");
    }
    

    Und jetzt da ich es vernünftig lesen kann, werde ich mal über deine Frage nachdenken und mich später melden.


  • Mod

    Dein Problem sind nicht die Container, die verhalten sich wie jede andere Klasse auch. Du solltest dich jedoch nochmal mit Klassenmethoden und wie man diese implementiert beschäftigen. So geht es richtig (ohne große Erklärung, das liest du besser nochmal in einem Buch):

    class CBelegKonto : public CKonto
    {
    private:
     vector<CBeleg> belege;
    public:
     virtual void ausgebenKonto(int position, string strKontoName);
     void setAlleBelege();
     void alleBelege_anzeigen() const;  // Warum soll einer Anzeigememberfunktion ein Objekt der eigenen Klasse übergeben werden? Ist das von dir so gewollt? Außerdem: const correctness
    };
    
    ...
    
    void CBelegKonto::alleBelege_anzeigen() const [code]// Außerhalb der Klasse musst du kenntlich machen, dass du eine Klassenmethode implementieren willst und keine freie Funktion.
    {
     double dSumme=0;
    
     for(size_t i = 0; i < belege.size(); ++i)   // Da du eine Klassenmethode schreibst wird implizit angenommen, dass du dich auf Klassenvariablen beziehst. Dein Ausdruck war zudem falsch, da alleBelege keine Klasse ist.
     {
      dSumme += belege[i].anzeigen(); // Ebenso hier
     }
     cout << endl;
     cout << "Summe: " << dSumme << endl;
    
     system("pause");  // siehe den FAQ Thread zum Thema system("pause")
    }
    

    Ich hoffe ich habe deine Absichten richtig interpretiert, dass du alleBelege_anzeigen als Memberfunktion und nicht als freie Funktion haben willst. Ich war mir da nämlich nicht so sicher. Wenn du es als freie Funktion haben willst, musst du entweder der Klasse einen getter hinzufügen oder in der Tat friend verwenden.



  • Danke SeppJ
    (in meinem C++ habe ich einige Lücken, da werde ich hinarbeiten)


Log in to reply