Probleme bei der Dereferenzierung von Pointern



  • hi, ich packs irgendwie nicht den Inhalt von Pointern, in meiner Übung ein Objekt auf dem Heap, in einen anderen Pointer zu kopieren. Der = Operator wird dabei anscheinend nicht ausgeführt bzw ich dereferenziere sicher völlig falsch.
    Ich hoffe mir kann da jemand weiterhelfen:

    class Sub;
    class Basis
    {
    public:
    	virtual void result() const = 0;
    	virtual const Sub& operator=(const Sub&) = 0;
    	virtual ~Basis() {}
    };
    
    class Sub:public Basis
    {
    	int j;
    public:
    	Sub(int jj = 0) : j(jj) {}
    	friend const Sub operator+(const Sub& left, const Sub& right) {
    		return Sub(left.j+right.j);
    	}
    	const Sub& operator=(const Sub& right) {
    		if(this!=&right) 
    			j = right.j;
    		return *this;
    	}
    	void result() const { std::cout << j << std::endl; }
    };
    
    /* MAIN */
    int main()
    {
             Basis* sub = new Sub;
    	Basis* subarray[2] = { new Sub(5), new Sub(20) };
    
    	//funzt nicht, kein Aufruf des = Operators
    	*sub = *subarray[1];
    	sub->result();
    
    //  *sub = *subarray[1] + *subarray[1];
    
    	//funzt, = operator wird aufgerufen
    	Sub b(10);
    	*sub = b;
    	sub->result();
    
    //*sub = b+b
             return 0;
    }
    


  • Hier

    *sub = *subarray[1];
    

    wird der am besten passende operator= aufgerufen, und das ist der deafultmäßig erstellte deiner Basisklasse, da du einem Objekt vom Typ Basis eins vom Typ Basis zuweisen willst. Polymorphismus funktioniert halt nur mit Pointern oder Referenzen.


Anmelden zum Antworten