private static variablen einer klasse außerhalb der klasse initialisieren?
-
hi,
ich hab hier ein kleines verständnisproblem. vielleicht kann mir da jmd weiterhelfen?!
und zwar hab ich eine klasse sparkonto, in der habe ich (private) variablen eingefügt.
die variable zins ist static, da sie für alle sparkonten nur 1x existieren soll.
außerdem kann ich sie nur über die public methode(gleiche klasse) setZins ändern.
Nun müsste ich doch aber auch die variable zins initialisieren. da sie static ist, müsste ich sie doch eigentlich außerhalb der klassendefinition initialisieren?!
darauf kann ich aber nicht zugreifen, weil ich sie private gemacht hab.
(ich muss sie erst einmal mit 0 vorbelegen)
hier der code(ich habe 3 verschieden dateien: test.cpp,zins.cpp,zins.h):
zins.h#include <iostream> class Sparkonto { private: double betrag; static double zins; //initalisierung außerhalb klasse & main?! //für alle objekte 1x vorhanden public: //Sparkonto(); Sparkonto(void); static void setZins(double a); //statische funktionen können //können nur mit static //variablen zusammenarbeiten?! void verzinsen(); void zeigeBetrag(); void einzahlen(double b); };zins.cpp
#include <iostream> #include "sparkonto.h" using namespace std; Sparkonto::Sparkonto() { betrag = 0; } void Sparkonto::setZins(double a) { zins = a; } void Sparkonto::einzahlen(double b) { betrag += b; } void Sparkonto::verzinsen() { betrag += betrag * zins /100.0; } void Sparkonto::zeigeBetrag() { cout << "Betrag: " << betrag <<endl; }
-
die definition von zins außerhalb der klasse ist in ordnung.
//zins.cpp #include "sparkonto.h" double Sparkonto::zins; //weiter wie gehabtund ja, statische funktionen können nur mit statischen klassenvariablen arbeiten (weil sie ja an keine konkrete instanz gebunden sind).
-
dachte nur, dass das ein widerspruch wäre, da die variable private ist und
ich diese dann eigentlich nicht von außerhalb der klasse
benutzen bzw. initialisieren könnte?!
danke für die schnelle antwort
-
nun ja, ich würde nicht sagen, dass das "von außerhalb" ist.
class Foo { void Bar (); }; void Foo::Bar () { }die definition von Foo::Bar liegt jetzt auch außerhalb der klasse. verletzung der kapselung? wohl kaum.