Static Member Functions
As seen in the discussion about object orientation there can also be static member functions.
OO: Class operations <-> C++: static member functions
They also uses the keyword "static".
Usage:
When there is "only one"
When the function does not depend on any non-static class atttributes
For constructing pre-defined object.
Example:
class Color { private: int red, green, blue; public: static Color* createTTURed(); }; Color* Color::createTTURed() { Color *c = new Color; c->red = 204; c->green = 0; c->blue = 0; return c; }
Notes for static member variables:
Since they are part of the class they are allowed to use private member data.
However, they do not have an object with them. So they can only access static member variables directly, all others only if they have an object.
To use a static member variable use them as if they where in a namespace. From within the class this is unnecessary.
Example:
Color* c = Color::createTTURed();
Practice:
define a class "Location" that has the two member variables posX and posY. provide a static member function called "getOrigin()" that creates a new location with posX=0 and posY=0.
Show the class definition and the implementation for getOrigin(). Show an example of how this could be called.
class Location { private: int posX,posY; public: static Location* getOrigin(); }; Location* Location::getOrigin() { Location *l = new Location(); l->posX = 0; l->posY = 0; return l; } ... Location *o = Location::getOrigin();
Intermission: So how do I call a method again?
Assume the follwing class definiton:
class Bla { public: static int doSomething(bool really); string getName(); }
To call the static function, we have 3 options:
// Preferred way: int i = Bla::doSomething(true); // This works also, but I do not like it. int i = b->doSomething(true); // Assuming b is of type Bla* int i = c.doSomething(true); // Assuming c is of type Bla
To call the non-static function we have two options:
string s = b->getName(); // Assuming b is of type Bla* string s = c.getName(); // Assuming b is of type Bla