C++ Klassen



  • Ich habe mal eine Frage.
    Ich habe eine Klasse Theatre. In der gibt es eine Klassenvariable, die unterstrichen ist (Das bedeutet doch static oder bin ich da falsch).
    +numberOfTickets: int
    -ticket: Ticket[numberOfTickets]

    Die (konstante) Klassenvariable numberOfTickets hat den Wert 150.

    Jetzt meine Frage, wie schreibe ich das in die Header-Datei?
    Ich habe es so gelöst:
    public:
    const int numberOfTickets = 150;
    private:
    Ticket *tickets;

    Ist das KORREKT????
    Kann ich in der Header-Datei mit 150 initaliesieren? oder macht man das eher in der cpp?



  • AlexandraK schrieb:

    Ich habe eine Klasse Theatre. In der gibt es eine Klassenvariable, die unterstrichen ist (Das bedeutet doch static oder bin ich da falsch).

    Richtig, eine Klassenvariable ist static .

    AlexandraK schrieb:

    Kann ich in der Header-Datei mit 150 initaliesieren? oder macht man das eher in der cpp?

    Regel: In eine Header-Datei kommen keine Definitionen (abgesehen von Klassen, Enumerationen und Templates). Jetzt gibt es aber eine Ausnahme für static const Member. Denen kannst du direkt bei der Klassendefinition einen Wert geben.

    Nach deinen Angaben hätte ich das Ganze so gelöst:

    class Theatre
    {
    	public:
    		static const int numberOfTickets = 150;
    	private:
    		Ticket tickets[numberOfTickets];
    };
    


  • Ich danke dir Gugelmoser.
    Ich weiß nicht, ob das zu unverschämt ist, aber ich hänge an dem Konstruktor fest, denn ich machen soll.
    Das Theater hat 10 Sitzreihen und 15 Plätze pro Reihe, d.h.(konstante!)Klassenvariable numberOfTickets hat den Wert 150. DAS IST GELÖST 😃

    Aber jetzt soll der Standartkonstruktor erstellt werden:
    Der Standardkonstruktor von Theatre soll ein unbesetztes Theater erzeugen, dessen Tickets (d.h. also die Ticket-Objekte im Array tickets) aber schon die richtigen Reihennummern und Platznum-mern enthalten. Außerdem soll der Preis für jedes Ticket nach folgendem System gesetzt werden: Die äußeren Plätze in der letzten Reihe (also Platz 1 und 15 in der Reihe 10) kosten beide 10 Euro. Für jede Reihe weiter vorn erhöht sich der Ticketpreis um 1 Euro und gleichzeitig erhöht sich der Ticketpreis für jeden Sitz in Richtung Mitte um 0,50 Euro. Der teuerste Platz im Theater ist also der Platz 8 in der ersten Reihe mit 22,50 Euro. 😞

    Ich hoffe es kann mir jemand weiterhelfen!
    danke



  • #include <iostream>
    using namespace std;
    
    struct Ticket
    {
    	unsigned reihennummer;
    	unsigned platznummer;
    	unsigned preis;
    };
    
    class Theatre
    {
        public:
            static const int numberOfTickets = 150;
    		Theatre()
    		{
    			for(unsigned reihe=9, preis_reihe=1000; reihe<10; --reihe, preis_reihe+=100)
    			{
    				for(unsigned platz=0, preis_mitte=0; platz<15; ++platz)
    				{
    					Ticket t = { reihe+1, platz+1, preis_reihe+preis_mitte };
    					tickets[ (9-reihe)*15 +platz ] = t;
    
    					preis_mitte += ( platz<7 ? 50 : -50 );
    				}
    			}
    		}
    
        private:
            Ticket tickets[numberOfTickets];
    };
    
    int main()
    {
    	Theatre t;
    }
    


  • 1000 Dank Gugelmoser 🙂


Anmelden zum Antworten