Funktion im Hauptprogramm, die auf private Member der Klasse zugreifen kann



  • Ja gut, er will uns wohl die Zusammenhänge näher bringen.

    Wer kann mir denn nun etwas zu der Aufgabe selbst sagen. Versteht jemand, was er genau möchte? Es soll ja nicht so sein wie ich es gemacht habe!?



  • muschelfinder schrieb:

    Ja gut, er will uns wohl die Zusammenhänge näher bringen.

    Inem er euch den ganzen Scheiß machen lässt den man möglichst vermeiden sollte? Didaktisch absolute Katastrophe.



  • pumuckl schrieb:

    muschelfinder schrieb:

    Ja gut, er will uns wohl die Zusammenhänge näher bringen.

    Inem er euch den ganzen Scheiß machen lässt den man möglichst vermeiden sollte? Didaktisch absolute Katastrophe.

    finde ich nicht.



  • volkard schrieb:

    pumuckl schrieb:

    muschelfinder schrieb:

    Ja gut, er will uns wohl die Zusammenhänge näher bringen.

    Inem er euch den ganzen Scheiß machen lässt den man möglichst vermeiden sollte? Didaktisch absolute Katastrophe.

    finde ich nicht.

    und wieso nicht?



  • Besten Dank für die vielen Meinungen. Konkrete Hilfe würde mir aber mehr weiter helfen.

    Ich denke er mein es so, dass ich eine Funktion in Kontoverwaltung.cpp deklarieren soll und diese in der Konto.h mit friend deklariere.

    also etwa so:

    //Kontoverwaltung.cpp
    .....
    void drucke_kontoauszug()
    {
    cout << iKtoNr;
    }
    
    //Konto.h
    friend void drucke_kontoauszug()
    


  • Das friend muss in die Klassendeklaration

    class CKonto
    {
    friend void drucke_kontoauszug()
    public:
     //..
    private:
     //..
    
    };
    

    Gleichzeitig solltest du dir überlegen woher deine Funktion drucke_kontoauszug() weiß von welchem Objekt es die Daten ausdrucken soll. Die Funktion bräuchte daher in meinen Augen noch einen Parameter. 😉



  • Mitleid schrieb:

    Die Funktion bräuchte daher in meinen Augen noch einen Parameter. 😉

    und nen semikolon nach den klammern brauch sie auch noch 😛



  • Das wäre die Lösung gewesen:

    ////////////////////Kontoverwaltung.cpp////////////////////
    #include <iostream>
    #include <conio.h>
    #include "Konto.h"
    using namespace std;
    
    int zahl;
    float _Betrag;
    
    int main()
    {
    
        CKonto testkonto(123123, 5.0);
    weiter:
        do
        {
        cout << "Kontoverwaltung" << endl;
        cout << "Ihr Kontostand betraegt:  ";
        testkonto.kontostand_lesen();
        cout << "1: Kontostand lesen" << endl;
        cout << "2: einzahlen" << endl;
        cout << "3: auszahlen" << endl;
        cout << "4: Kontoauszug drucken" << endl;
        cout << "0: Ende" << endl;
    
        cin >> zahl;
    
            switch(zahl)
            {
                case 1:
                    cout << "Kontostand lesen" << endl;
                    break;
                case 2:
                    cout << "einzahlen" << endl;
                    cin >> _Betrag;
                    testkonto.einzahlen(_Betrag);
    
                    break;
                case 3:
                    cout << "auszahlen" << endl;
                    cin >> _Betrag;
                    testkonto.auszahlen(_Betrag);
                    break;
                case 4:
                    cout << "Kontoauszug drucken:" << endl;
                    drucke_kontoauszug(testkonto);
                    break;
                case 5:
                    cout << "Ende" << endl;
                    break;
            }
        }while(zahl != 0);
    
        _getch();
    
    }
    
    ////////////////////Konto.cpp////////////////////
    #include "Konto.h"
    #include <iostream>
    using namespace std;
    
    CKonto::CKonto(void)
    {
    }
    
    CKonto::~CKonto(void)
    {
    }
    
    CKonto::CKonto(int _KtoNr, float _KtoStand)
    {
        fKtoStand = 0;
        iKtoNr = _KtoNr;
        fKtoStand = _KtoStand;
    }
    
    void CKonto::kontostand_lesen()
    {
        cout << fKtoStand << " Euro" << endl;
    }
    
    void CKonto::einzahlen(float _Betrag)
    {
        fKtoStand+=_Betrag;
    }
    
    void CKonto::auszahlen(float _Betrag)
    {
        if(_Betrag > fKtoStand)
            cout << "Nicht moeglich, Limit erreicht!\n" << endl;
        else
        {
        fKtoStand-=_Betrag;
        }
    }
    
    void drucke_kontoauszug(CKonto &param_konto)
        {
            cout << "\nDatum: 20.04.2009";
            cout << "\n" << "Kto. Nr.:" << param_konto.iKtoNr;
            cout << "\n" << "Kontostand:" << param_konto.fKtoStand << endl << endl;
        }                
    
    ////////////////////Konto.h////////////////////
    #ifndef KONTO_H
    #define KONTO_H
    
    #pragma once
    
    class CKonto
    {
    public:
        CKonto(void);
        ~CKonto(void);
        CKonto(int, float);
        void kontostand_lesen();
        void einzahlen(float _Betrag);
        void auszahlen(float _Betrag);
        friend void drucke_kontoauszug(CKonto &param_konto);
    private:
        float fKtoStand;
        int iKtoNr;
    
    };
    
    #endif
    


  • Die globalen Variablen in der Main müssen nicht sein, pack das mit in die Main rein.Und ich hoffe das "weiter:" vor deinem "do-while" ist nur noch ein überbleibsel von einem goto, verwende bitte sowas nie wieder 😛



  • volkard schrieb:

    pumuckl schrieb:

    muschelfinder schrieb:

    Ja gut, er will uns wohl die Zusammenhänge näher bringen.

    Inem er euch den ganzen Scheiß machen lässt den man möglichst vermeiden sollte? Didaktisch absolute Katastrophe.

    finde ich nicht.

    Und warum nicht? Der Prof konstruiert halbseidene Beispiele die mit friends gelöst werden sollen, obwohl es Alternativen gibt. Sein Ziel ist zwar, die Verwendung von friends beizubringen, aber was er damit vor allem beibringt ist "wenn du einen Hack brauchst nimm einfach friend". friend ist die stärkste Abhängigkeit die es in C++ gibt, und daher sollte man die Nutzung von friends nach Möglichkeit vermeiden. Die Aufgabenstellung des Profs "es geht auch anders, aber nimm auf jeden Fall friend" untergräbt das, wenn auch vielleicht unbeabsichtigt. Deshalb didaktisch ziemlicher Müll. Wenn er ein Beispiel genommen hätte was tatsächlich nur mit friends zu regeln gewesen wäre, kein Problem.
    Beim vorliegenden Beispiel wäre es sehr viel klüger gewesen, die friend-Lösung vorzugeben und als Aufgabe zu schreiben "Finden Sie eine Alternative um die friend-Deklaration zu vermeiden". Damit hat der Student zum Einen ein Beispiel wie eine friend-Deklaration aussehen kann, zum Anderen lernt er das wichtigste bei friends - nämlich sie zu vermeiden.


Anmelden zum Antworten