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 zumfriend
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