Klasseninstanz erzeugen, aber folgendermaßen....



  • Hallo!

    Sagen wir mal, wir haben 2 Klassen. Klasse A und Klasse B.
    Klasse A soll eine Instanz von Klasse B erzeugen. ABER: Der Name der erzeugten Instanz von B soll einen Namen haben, den man Klasse A als Argument übergeben hat.

    Wiem kann ich das realisieren?

    Wenn ich als argument "char name" übergebe und dann versuche
    "Klasse-B name" zu machen, wird eine instaz erzeugt die "name" heißt. dabei soll die Instaz den Namen haben, der in der variablen "name" enthalten ist..

    danke im voraus....



  • Stichwort: template



  • ein
    $name="foo";

    name = "bar"; echo $foo; //gibt "bar" aus gibt es in C++ nicht hier verwendet man eine map map values; values.insert(make_pair("foo","bar")); cout<

  • ähhmm.. ich denke ich meine tatsächlich was anderes:

    Hier ein kleines beispiel:

    class B //damit Klasse A die Klasse B schon kennt...
    
    class A
    {
     public:
     A();
     ~A();
     void b_maker(char instanzName);// Die funktion, die eine instanz von B erzeugen soll.
    }
    
    A :: b_maker (char instanzName);
    {
     B instanzName	
    }
    
    /////////////////////////////////////////////////
    
    class B 
    {
    public:
     B();
     ~B();
     void showitsWert;
    private:
    int itsWert;
    }
    
    void B :: showitsWert
    cout << B.itsWert
    
    ////////////////////////////
    
    char instanzName [] = "abc";
    
    A bspA;
    
    bspA.b_maker(instanzName) // Nun sollte die Inastnz von B erzeugt worden sein und "abc" heißen!!!!
    
    abc.showitsWert(); //nun sollte itsWert von abc ausgegeben werden....
    

    ich denke nun kann man mich nur richtig verstehen. 👍



  • Das geht nicht.

    dein Beispiel ergibt auch keinen Sinn...

    du kannst keine variablen dynamisch zur Laufzeit erstellen - sie müssen vorher schon feststehen (du kannst nur, zB die größe eines Arrays zur Laufzeit ändern, aber nicht den Namen und ob es diese Variable überhaupt gibt)

    Das ist der Nachteil von kompilierten Programmen.



  • das mit dem "Das geht nciht!" war mir innerlich fast schon klar...
    Ich hatte nur gehofft vielleicht doch von jmg. gesagt zu bekommen dass es doch geht... naja , dann komm ihc wohl ohne sowas aus. Das wird den komfort der nutzung der klasse "senken" aber wenns anders nciht geht.. 😞

    trotzdem danke für das mitdenken.



  • normalerweise kommt man mit einer map aus - erklär mal wofür du das brauchst. in deinem beispiel ergibt für nämlich nix sinn.



  • heheh... ist ja auch ein kleines beispiel das ihc mir eben ausgedacht habe um mein problem zu beschreiben.

    -Ich schreibe gerade eine klasse, die sich wiederum an 20 anderer klassen bedient. Sie sollte dem programmierer die möglichkeit geben ein argument zu übergeben, und von den anderen 20 klassen jeweils eine instanz mit dem selben, also als argument erhaltenen namen zu erstellen.
    -------------------------------------------------------------------
    inzwischen verzicht ich drauf.



  • ja, schön. Aber was bezweckst du damit?



  • Ich habs (mal wieder :/) nicht kapiert was gefordert wird,

    aber vllt. hilft Dir ja eine Fabrik weiter.
    Du Arbeitest dann mit einer Basisklasse und virtuellen Methoden.

    Somit hast Du unterschiedliche Klassen(funktionalitäten) aber mit dem Namen den der Anwender der Fabrik verwendet.

    Base * myName = Factory.CreateObject("Tuedies");
    
    myName->machschon();
    
    myName = Factory.CreateObject("Tuejenes");
    
    myName->machschon();
    

Anmelden zum Antworten