Klassen-Frage



  • Danke.

    Noch ne Frage:
    In meinem Buch steht drinne, dass Variabeln im Label "private" nicht verändert werden können.
    Ist richtig und stimmt auch so. Aber kann man sie auch nicht aufrufen? 😮

    #include "stdafx.h"
    #include <iostream>
    #include <conio.h>
    using namespace std;
    
    #pragma warning(disable:4244)
    
    const int MaxBez = 40;
    const int MaxCode = 20;
    
    class CWare
    {
    public:
    	char Bezeichnung[MaxBez];
    	char Strichcode[MaxCode];
    	void NeuPreis(float neuerPreis);
    
    private:
    	float Preis;
    };
    
    void Protokolliere(int Preis, int neuerPreis)
    {
    	cout << "Protokolliert!";
    }
    
    void CWare::NeuPreis(float neuerPreis)
    {
    	Protokolliere(Preis, neuerPreis);
    	Preis = neuerPreis;
    }
    
    int main()
    {	
    	cout << "Das Hauptprogramm...." << endl;
    
    	CWare Schokoriegel;
    
    	float aktuellerPreis = 0.75;	
    	Schokoriegel.NeuPreis(aktuellerPreis);
    	cout << "Der aktuelle Preis ist "<<Schokoriegel.Preis<<endl; //Hier meckert der Compiler rum....
    
    	#pragma warning(disable:4996)
    	getch();
    	#pragma warning(default:4996)
    
    }
    


  • Private variablen können nur innerhalb der Klasse aufgerufen (verändert / angezeigt) werden.

    Nach außenhin sind diese unsichtbar.

    Für die Anzeige kannst du dir ebenfalls einen Klassenmember schreiben, der dann eben die Aufgabe hat entweder den Preis als ganzes auszugeben oder ihn als Rückgabewert hat.



  • Habs nun einfach direkt in die Funktion geschrieben:

    void CWare::NeuPreis(float neuerPreis)
    {
    	Protokolliere(Preis, neuerPreis);
    	Preis = neuerPreis;
    	cout << "Der aktuelle Preis ist: " << Preis;
    }
    


  • Zum üben find ich das in Ordnung, aber genau genommen solltest du es in 2 verschiedene Methoden legen. 🙂

    Allein, da eine Methode normalerweise nur eine Aufgabe haben sollte. - Deine hat 2.



  • inflames2k schrieb:

    Für die Anzeige kannst du dir ebenfalls einen Klassenmember schreiben, der dann eben die Aufgabe hat entweder den Preis als ganzes auszugeben oder ihn als Rückgabewert hat.

    Getter- und Setter() sind genau so unschön wie public Variablen. Wenn ich etwas wie er vor hätte, würde ich auf Strukturen zurückgreifen.



  • Hallo

    Und wo soll der Unterschied zu einem struct sein? Das ist in c++ das gleiche wie einen Klasse nur die default Sichtbarkeit ist anders.

    chrische



  • chrische5 schrieb:

    Und wo soll der Unterschied zu einem struct sein?

    chrische5 schrieb:

    ... die default Sichtbarkeit ist anders.



  • Hallo

    Wo ist der Unterschied zwischen:

    struct Foo()
    {
    int toll;
    }
    

    und

    class Foo()
    {
    public: 
    int toll;
    }
    

    Greifst du wegen des geringeren Schreibbedarfs zum struct oder was ist denn genau der Grund?

    chrische



  • Es geht doch im Grunde garnicht darum, was der Unterschied zwischen einem Struct und einer Klasse ist, der Threadersteller wollt doch nur wissen wie er auf den Private Member zugreifen kann.



  • Hallo

    Ja klar und da bieten sich Getter und Setter an. Ich wollte aus reinem Interesse wissen, warum pivke denkt, dass man das so nicht macht, sondern dann besser structs einsetzt.

    chrische



  • Kóyaánasqatsi schrieb:

    Getter- und Setter() sind genau so unschön wie public Variablen.

    Das solltest du in einem C++-Forum besser nicht sagen. Oder zumindest auf eine Weise, in der mans nicht gleich missversteht.



  • Nexus schrieb:

    Kóyaánasqatsi schrieb:

    Getter- und Setter() sind genau so unschön wie public Variablen.

    Das solltest du in einem C++-Forum besser nicht sagen. Oder zumindest auf eine Weise, in der mans nicht gleich missversteht.

    So, wie ich seinen Post verstehe hat er offenbar nicht verstanden wozu Getter und Setter da sind..
    Oder missverstehe ich ihn da tatsächlich?


Anmelden zum Antworten