Übergabe von Objekten ...



  • Hallo,

    ich habe eine set-Funktion einer Klasse, mit der ich ein Objekt der Klasse setzen kann. Keine große Sache also:

    class ListClass
    {
    	private:				
    		ClassIniObject myIniObject;		
    
    ...
    
    bool ListClass::setIniObject(ClassIniObject iniObject)
    {
    	myIniObject = iniObject;
    	return true;
    }
    

    Meine Frage ist nun, ob ich das so einfach machen kann mit der "= Zuweisung" und ob da wirklich das ganze Objekt fehlerfrei übernommen wird.
    Weil doch iniObject eigentlich eine lokale Variable ist ...

    Habt vielen Dank



  • BartS schrieb:

    Meine Frage ist nun, ob ich das so einfach machen kann mit der "= Zuweisung" und ob da wirklich das ganze Objekt fehlerfrei übernommen wird.

    Das kommt darauf an, wie ClassIniObject aussieht, und ob und wie du den Zuweisungsoperator geschrieben hast. Der Copykonstruktor wäre auch interessant, weil beim Aufruf von setIniObject eine Kopie erstellt wird.

    Weil doch iniObject eigentlich eine lokale Variable ist ...

    Das hat damit eigentlich weniger zu tun.



  • btw: wenn ich mir deine Mehtode anschaue, würde ich eventuell überlegen das Objekt als const-Referenz zu übergeben.

    Caipi



  • Wo läge der Vorteil bei const-ref? Weil wenn da das Objekt in der aufrufenden Fkt. zerstört wird, ist es ja auch für die Klasse weg, oder?

    Und muss ich einen Copykonstruktur bzw. den =-Operator extra schreiben (sprich alle Variablen des Objektes einzeln übergeben) oder ist der standardmäßig nicht irgendwie dabei???



  • Wo läge der Vorteil bei const-ref?

    das keine unnötige Temporäre Kopie des Objekts angelegt werden muss. Das kostet Zeit und Speicher!

    http://www.gotw.ca/gotw/002.htm

    Und muss ich einen Copykonstruktur bzw. den =-Operator extra schreiben (sprich alle Variablen des Objektes einzeln übergeben) oder ist der standardmäßig nicht irgendwie dabei???

    Die werden nur dann angelegt, wenn alle Membervariablen kopierbar sind, kein Member eine Referenz ist und von keiner Klasse geerbt wird, bei der kein CCtor/=-Op vorhanden ist.

    Also in den meisten Fällen wird es automatisch angelegt.

    Folgendes Buch solltest du glaube ich mal lesen
    Effektiv C++ programmieren | ISBN: 3827313058



  • hi!

    machs du mal so:

    #include <string> 
    #include <iostream> 
    #include <vector>
    using namespace std;
    
    class Foo1
    {
    private:
        int value;
    
    public:
        Foo1(){}
    
        Foo1(int set_value): value(set_value) {}
    
        int getvalue()
        {
            return value;
        }
    };
    
    class Foo2 
    { 
    private: 
        Foo1 ptr_Foo1;
    
    public: 
    ´   void setInstance(const Foo1 &ptr_a)
        {
    	ptr_Foo1 = ptr_a;
        }
    
        int Instance_getvalue()
        {
            return ptr_Foo1.getvalue();
        }
    }; 
    
    int main()
    {
    	Foo1 foo1(2);
    	Foo2 foo2;
    
    	foo2.setInstance(foo1);
    
    	cout << foo2.Instance_getvalue() << endl;
    
             cin.get();
    }
    

    cu


Log in to reply