c++ programm - hilfe!



  • Schönen Abend an alle!
    Also och habe heuer mit meinem studium angefangen und habe leider noch fast keine vorkenntnisse zu c++. Jetz müssen wir in unserem semester ein "Rollenspiel" programmieren. Meine Aufgabe ist es eine Klasse object zu erstellen!
    Also habe ich das die header datei geschrieben. nun meine Frage: ich habe leider noch einige Probleme beim ausprogrammieren meiner methoden. Vl könnt ihr mir ja weiterhelfen!
    Also ich habe
    Methoden:
    use: Rückgabewert boolean (Benutzung erfolgreich/ nicht erfolgreich)
    .) für das aktuelle bsp ( kein konkretes Objekt) ist die benutzung immer erfolgreich
    .) Parameter Character (benutzende Spielfigur)
    .) Ausgabe (I/O-Handler); "[CharacterName] uses [ObjektName]: [UseMessage]"

    identif: .) Rückgabewert void
    .) keine Parameter
    .) setzt identified auf true
    .) Ausgabe (I/O-Handler): "[NichtIdentifizierterName] is identified as [IdentifizierterName]"

    destroy: .) Rückgabewert void
    .) keine Parameter
    .) setzt destroyerd auf true
    .) Ausgabe (I/O-Handler): "[Objektname] is destroyed"

    getName .) Rückgabewert Zeichenkette
    .) keine Parameter
    .) retourniert, basierend auf identified, den richtigen Member

    Noch eine Beschreibung der Klassen:

    Members:
    - IOHandler& handler_
    - char* name_identified_
    - char* name_not_identified_
    - char* use_message_
    - bool identified_
    - bool destroyed_

    Methoden:
    + virtual bool use(const Character& character) const
    Wird ausgeführt, wenn der Charakter ein Objekt verwendet. In der jetzigen Version wird
    nur eine Meldung (siehe Angabe) ausgegeben und true zurückgegeben (success).

    + virtual void identify()
    Setzt das Attribut identified auf true. Eine Meldung (siehe Angabe) wird ausgegeben.

    + virtual void destroy()
    Setzt das Attribut destroyed auf true. Eine Meldung (siehe Angabe) wird ausgegeben.

    + virtual char *getName() const
    Gibt den identifizierten Namen des Objekts zurück, wenn identified_ true ist. Sonst gibt
    die Methode den nicht identifizierten Namen des Objekts zurück.

    Ich weiß es ist sehr viel zu lesen. 😉 aber ich wäre sehr dankbar für nützliche Tipps!

    Danke im voraus!

    mfg rene



  • Benutze string statt char* sofern dies nicht vorgegeben ist. Mit strings lässt sich leichter und sicherer umgehen. 🙂



  • Ja würde ich gerne aber das ist leider alles vorgegeben 😞
    Aber trotzdem danke für die schnelle Antwort!
    mfg



  • aja das sind meine 2 dateien:

    #ifndef OBJECT_H
    #define OBJECT_H

    class Object
    {
    private:
    IOHandler& handler_;
    char* name_identified_;
    char* name_not_identified_;
    char* use_message_;
    bool identified_;
    bool destroyed_;

    public:
    Object(IOHandler& handler, char* name_identified, char* name_not_identified, char* use_message, bool identified, bool destroyed);
    ~Object();
    virtual bool use(const Character& character) const;
    virtual void identify();
    virtual void destroy();
    virtual char *getName() const;

    };

    #endif

    und hier der Teil wo ich mich nicht auskenne:

    #include <iostream>
    #include <cstring>
    
    #include "Object.h"
    
    //Constructor
    Object::Object(IOHandler& handler,	char* name_identified,	char* name_not_identified,
    	             char* use_message, bool identified, bool destroyed) 
    							 :handler_(handler), name_identified_(name_identified), name_not_identified_(name_not_identified),
    							 use_message(use message), identified_(identified), destroyed_(destroyed)
    { 
    
    }
    //Destructor
    Object::~Object()
    {
    
    }
    
    virtual bool use (const Character& character) const
    {
     return 0;
    }
    
    virtual void identify()
    {
    	object_identified = true;
    	handler_.printMessage("[NichtIdentifizierterName] is identified as [IdendifizierterName]");
    	return;
    }
    
    virtual void destroy()
    {
    	destroyed = true;
    	handler.printMessage("[ObjektName] is destroyed");
    	return;
    }
    


  • Jetzt stellt sich die Frage, was Dein konkretes Problem ist.

    Des Weiteren kannst du klassenintern durchaus std::strings verwenden. Entscheidend ist ja, dass das Interface gleich bleibt. Eben darum hat man ja auch OOP erdacht. 😉

    Grüße ... Heiko



  • Meine Fragen:
    Wie kann ich diese methoden:
    + virtual bool use(const Character& character) const
    Wird ausgeführt, wenn der Charakter ein Objekt verwendet. In der jetzigen Version wird
    nur eine Meldung (siehe Angabe) ausgegeben und true zurückgegeben (success).
    + virtual void identify()
    Setzt das Attribut identified auf true. Eine Meldung (siehe Angabe) wird ausgegeben.
    + virtual void destroy()
    Setzt das Attribut destroyed auf true. Eine Meldung (siehe Angabe) wird ausgegeben.
    + virtual char *getName() const
    Gibt den identifizierten Namen des Objekts zurück, wenn identified_ true ist. Sonst gibt
    die Methode den nicht identifizierten Namen des Objekts zurück.
    Object()
    ~Object()
    ausprogrammieren? in die object.cpp file!
    Danke im voraus!

    mfg



  • Ich nehme mal an, dass Du/Ihr für Euer Rollenspiel noch einige Tage Zeit habt. Und Du im speziellen auch einige Tage für deine Objekt-Klasse. Ich will Dir diese Klasse jetzt nicht "ausprogrammieren" (ich denke auch, niemand sonst hier).

    Die Beschreibungen, was die einzelnen Methoden erledigen sollen, sind gegeben. Im Grunde musst Du das nur noch umsetzen. Das sind Grundlagen, welche Du Dir durch entsprechende Lektüre (im Forum gibt es einige Buchvorschläge und auch Titel, um welche man einen Bogen machen sollte) relativ schnell selbst aneignen kannst.

    Des weiteren noch einige Anmerkungen zu deinem Code:

    * Const-Correctness beachten
    * (ich wiederhole nochmal) STL-Klassen gehören nicht umsonst zum Standard 😉
    * Die Deklaration der Methoden als virtuell scheint mir (mit Ausnahme von use) überflüssig.

    Grüße ... Heiko



  • Ok danke! Ich glaube ich muss es dieses Semester lassen und dann nächstes nocheinmal machen. Habe leider zu wenig vorkenntnisse aber trotzdem danke!
    mfg rene



  • Bisschen mehr Motivation wär auch nicht schlecht 😉
    Du kannst ja mal im Internet nach C++-Tutorials suchen oder noch besser, ein Buch ausleihen (Ich habe z.B. C++ ENT-PACKT gelesen, zwar von 2001, aber mit deinen Kenntnissen solltest du eigentlich da hineinfinden.), falls es bei dir eine Bücherei gibt, oder halt kaufen.


Anmelden zum Antworten