Initialisierung eines statischen Teilobjekts



  • Dieses Problem koennte man ja noch durch einen entsprechenden Ctor loesen.
    Wie aber initialisiere ich ein statisches Teilobjekt mit einem Teilobjekt einer anderen Klasse?
    [cpp]
    class A;

    class B
    {
    protected:
    A a;
    double xB;
    };

    class A
    {
    public:
    A();

    protected:
    static double xA; // Wie initialisiere ich das mit B.xB?
    };
    [/cpp]
    Diesmal habe ich nicht mal die Moeglichkeit einen passenden Ctor zu definieren.
    Wie initialisiere ich das statische xA ohne A zum

    friend
    

    von B zu machen?



  • Garnicht, weil du das statische Element genau einmal initialisieren solltest, xb aber mit jedem neuen Objekt.



  • ness schrieb:

    [...] xb aber mit jedem neuen Objekt.

    Was waere, wenn ich garantieren wuerde, dass es nur eine Instanz von A gleichzeitig existiert?



  • class A 
    {
    public:
    	A() {}
    
        static void set_xA(double x) { xA = x;}
    
    	double get_xA() { return xA; } 
    
    protected:
        static double xA;
    };
    
    double A::xA = 0; 
    
    class B 
    { 
    protected: 
        A a;
        double xB;
    
    public:
    	B(): xB(0) {}
    
    	void set_xB_xA(double X) 
    	{ 
    		a.set_xA(X); 
    		xB = X;
    	}
    };
    
    int main()
    {
    	B b1;
    	b1.set_xB_xA(12);
    
    	cin.get();
    
    	return 0;
    }
    

    weiß nicht ob dir das was nützt;-)

    wie wäre es wenn du B von A ableitest??

    cu



  • class A 
    {
    public:
    	A() {}
    
        static void set_xA(double x) { xA = x;}
    
    	double get_xA() { return xA; } 
    
    protected:
        static double xA;
    };
    
    double A::xA = 0; 
    
    class B 
    { 
    protected: 
        A a;
        double xB;
    
    public:
    	B(double set_xB): xB(set_xB) { set_xA(xB); }
    
    	void set_xA(double X) 
    	{ 
    		a.set_xA(X); 
    	}
    
    	double get_XA() { return a.get_xA(); }
    };
    
    int main()
    {
    	B b1(1);
    
    	cout << b1.get_XA() << endl;
    
    	cin.get();
    
    	return 0;
    }
    

    ich glaub ich habs;-) willst du das so??

    cu



  • leichte verbesserungen:

    class A 
    {
    public:
    	A() {}
    
    	static void set_xA(double x) { static bool countCalls = 0; if(countCalls == 0) { xA = x; ++countCalls; }}
    
    	double get_xA() { return xA; } 
    
    protected:
        static double xA;
    };
    
    double A::xA = 0; 
    
    class B 
    { 
    private:
    	void set_xA(double X) 
    	{ 
    		a.set_xA(X); 
    	}
    
    protected: 
        A a;
        double xB;
    
    public:
    	B(double set_xB): xB(set_xB) { set_xA(xB); }
    
    	double get_xA() { return a.get_xA(); }
    
    	double get_xB() { return xB; }
    };
    
    int main()
    {
    	B b1(10);
    
    	cout << b1.get_xA() << endl;
    	cout << b1.get_xB() << endl;
    	A::set_xA(23);
    
    	cout << b1.get_xA() << endl;
    	cout << b1.get_xB() << endl;
    
    	cin.get();
    
    	return 0;
    }
    

    so...müsste das sein was du willst;-) 😃

    cu


Anmelden zum Antworten