Klasse als Parameter



  • Hallo,
    ich habe in meinem neuem Projekt ein Problem: eine Funktion muss als Parameter eine Klasse übergeben bekommen. Meines Wissens ist das nicht möglich. Oder doch? Also habe ich mir gedacht dass ich einen Zeiger auf eine Klasse übergebe. Aber wie kann ich einen Zeiger auf eine Klasse erstellen?


  • Mod

    #JP schrieb:

    Hallo,
    ich habe in meinem neuem Projekt ein Problem: eine Funktion muss als Parameter eine Klasse übergeben bekommen. Meines Wissens ist das nicht möglich. Oder doch?

    Natürlich geht das. Wieso sollte es nicht? Klassen sind Datentypen wie alle anderen auch (außer Arrays 😉 ).

    Also habe ich mir gedacht dass ich einen Zeiger auf eine Klasse übergebe. Aber wie kann ich einen Zeiger auf eine Klasse erstellen?

    Unnötig, siehe oben. Aber wo ist dein Problem? Zeiger auf Klassen erstellt man wie jeden anderen Zeiger. Klassen sind Datentypen wie alle anderen auch (außer Arrays).



  • Klar ist es möglich, eine Klasse als Parameter herumzureichen (es sei denn, der Entwickler hat den Copy-Konstruktor deaktiviert). Wenn die Objekte größer werden (oder nicht kopiert werden können), ist es vermutlich günstiger, eine Referenz zu verwenden:

    void funktion(const klasse& objekt)
    {
      ...
    }
    
    klasse meinObjekt;
    funktion(meinObjekt);
    


  • Ich hab das so versucht:

    int add_npo(int npo_number, class Klasse)
    

    Aber Visual C++ meldet einen Fehler.



  • "class" ist ja auch ein Schlüsselwort, das kannst du nicht als Bezeichner für einen Datentyp verwenden.

    Andere Frage: Was genau hast du eigentlich vor?



  • CStoll schrieb:

    "class" ist ja auch ein Schlüsselwort, das kannst du nicht als Bezeichner für einen Datentyp verwenden.

    Wie soll ich das dann machen?



  • #JP schrieb:

    CStoll schrieb:

    "class" ist ja auch ein Schlüsselwort, das kannst du nicht als Bezeichner für einen Datentyp verwenden.

    Wie soll ich das dann machen?

    Gegenfrage: siehe den Teil meines Beitrag, den du gerade weggelassen hast 😉



  • CStoll schrieb:

    #JP schrieb:

    CStoll schrieb:

    "class" ist ja auch ein Schlüsselwort, das kannst du nicht als Bezeichner für einen Datentyp verwenden.

    Wie soll ich das dann machen?

    Gegenfrage: siehe den Teil meines Beitrag, den du gerade weggelassen hast 😉

    Ich programmiere gerade für ein Spiel an einer Welt-Klasse, und dieser kann man per Funktion ein Objekt (Pflanze, Mensch, Tier usw.) hinzufügen. Und dieses Objekt soll eben durch verschiedene Variablen und Funktionen in einer Klasse stehen.



  • Das heißt, du willst eine Funktion, die dir zur Laufzeit verschiedene Objekte liefern kann? Da wäre wohl "virtueller Konstruktor" der richtige Suchbegriff für dich.



  • CStoll schrieb:

    Das heißt, du willst eine Funktion, die dir zur Laufzeit verschiedene Objekte liefern kann? Da wäre wohl "virtueller Konstruktor" der richtige Suchbegriff für dich.

    Nicht so ganz. Der Anwender soll durch eine Funktion der Welt ein Ding hinzufügen. Dieses Ding wird näher in einer Klasse beschrieben. Z.b. der Name, die Art des Dings (Stein, Hund Katzte usw.), auch den Zustand (tot, schlafend, essend usw.)
    Ich hoffe du verstehst das.



  • Und wo ist jetzt das Problem? Dann übergibst du halt ein Objekt mit den nötigen Daten:

    class Weltobjekt
    {
      string name;
      ...
    };
    
    void InsertObjekt(Weltobjekt obj)
    {
      ...
    }
    


  • CStoll schrieb:

    Und wo ist jetzt das Problem? Dann übergibst du halt ein Objekt mit den nötigen Daten:

    class Weltobjekt
    {
      string name;
      ...
    };
    
    void InsertObjekt(Weltobjekt obj)
    {
      ...
    }
    

    Stimmt eigentlich...
    Irgendwie hatte ich ein Brett vor dem Kopf...



  • Nur zur info: In C++ gibt es keine Class Objekte wie in Java, wir sind ja schließlich cool.



  • 314159265358979 schrieb:

    Nur zur info: In C++ gibt es keine Class Objekte wie in Java, wir sind ja schließlich cool.

    Wir sind die coolen Boys von C++ 😉


Anmelden zum Antworten