Konstruktor von einem Attribut aufrufen



  • Hallo,

    Ist es möglich den Konstruktor von einem Klassenattribut aufzurufen? Wenn man z.B. folgende Klassen hat:

    class A {
        A(int x, int y) {...}
    };
    
    class B {
    private:
        A a;
    public:
        B();
    };
    

    Wie würde man hier im Konstruktor von B das Objekt a initialisieren? Normalerweise schreibt man ja z.B.

    A a(3,2);

    aber in diesem Fall wurde a ja schon deklariert. Bisher habe ich in solchen Fällen immer a als Zeiger deklariert und mit "a = new A(3,2);" erstellt.



  • B::B() : A(x,y) {} // In einer Cpp-Datei.
    


  • out schrieb:

    B::B() : A(x,y) {} // In einer Cpp-Datei.
    

    Sorry, mach aus dem A ein a .



  • Ok, danke schon mal! Leider hilft mir das in meinem speziellen Fall noch nicht ganz. Ich versuche gerade eine map zu initialisieren und da brauche ich als Parameter einen Funktionszeiger.

    struct Edge {
        int v1, v2;
    };
    
    struct EdgeData {
        bool v1Selected, v2Selected;
    };
    
    class Selection {
    private:
        map<Edge, EdgeData, bool(*)(Edge, Edge)> edges;
    public:
        Selection();
    };
    

    In der cpp-Datei habe ich zusätzlich noch diese Funktion:

    bool edgeCompare(Edge e1, Edge e2) {
        if(e1.v1 == e2.v1)
            return e1.v2 < e2.v2;
        else
            return e1.v1 < e2.v1;
    }
    

    Die map will ich so wie hier im letzten Beispiel initialisieren. Dazu bräuchte ich ungefähr so einen Funktionszeiger "bool(*fn_pt)(Edge, Edge) = edgeCompare;". Die Frage ist nur wo definier ich den am besten? Wenn ich das einfach so oben in die cpp-Datei schreibe hätte ich das ja als globale Variable oder? Am besten wäre es wohl wenn ich ihn direkt bei der Definition vom Konstruktor definieren könnte, aber wie?


  • Mod

    &edgeCompare ?



  • Selection::Selection() : edges(&edgeCompare) { }
    


  • Ah, so einfach ist das? Vielen Dank!


Anmelden zum Antworten