Konstruktor Problem!



  • Hallo,

    ich hab mal wieder eine Frage.

    class Rectangle : public OneDimObject
    {
    	Point pa, pb;
    public:
    	Rectangle(Point pa=Point(0,0), Point pb=Point(1,1))
    	{}
    
    	Rectangle(string xy)
    	{
    		// Eingabestring im Format: [(x1, y1), (x2, y2)]
    		pa = Point(xy.substr((xy.find_first_of('(')),10));
    		pb = Point(xy.substr((xy.find_last_of('(')),10));
    		pa.print(true);
    		if(debugconstructor)
    			cout << "Konstruktor der Klasse Rectangle, ObjektID: " << this->getID() << endl;
    	}
    
    	void print(bool endl);
    
    };
    

    Kann ich im Konstruktor einen Konstruktor einer anderen Klasse aufrufen?
    Also so wie es oben programmiert habe ist es lauffähig, führt aber nicht zu dem gewünschten Ergebniss.

    Die Funktion soll folgendermaßen sein. Ich lese einen String ein im Format [(x1, y1), (x2, y2)], dieser String wird an den Rectangle Konstruktor übergeben.

    Die Rectangle Klasse hat noch 2 Elemente von der Klasse Point. Jetzt dachte ich mir das ich die beiden (pa und pb) folgendermaßen im Konstruktor initialisieren kann:

    pa = Point(xy.substr((xy.find_first_of('(')),10));
    

    Das Argument in der Klammer bei Point macht nichts anderes als aus dem [(x1, y1), (x2, y2)] die Punktkoordinaten (x1, y1) herauszuziehen. Der Konstruktor von Point wird das dann verarbeiten (das funktioniert auch!). Allerdings steht immer wenn ich dann das Rectangle Objekt wieder ausgebe in pa und pb nur (0, 0) drin.

    Der Compiler liefert allerdings keinen Fehler.

    Ich hoffe es kommt einigermaßen verständlich rüber was ich hier eigentlich machen will.

    Gruß maze 🙂



  • class Rectangle : public OneDimObject
    {
        Point pa, pb;
    public:
        Rectangle(Point const& pa = Point(0,0), Point const& pb = Point(1,1))
            : pa(pa), pb(pb)
        {}
    
        friend std::ostream& operator<<(std::ostream& out, Rectangle const& data); // anstelle von print!
    };
    

    Initialisierungsliste, Referenzen, const-correctness usw. solltest du dir mal aneignen.


Anmelden zum Antworten