C++ Tutorial/Class/static member functions
A static member functions
<source lang="cpp">#include <iostream> using namespace std;
class MyClass {
static int count;
public:
MyClass() { count++; cout << "Constructing object " << count << endl; } ~MyClass() { cout << "Destroying object " << count << endl; count--; } static int numObjects() { return count; }
};
int MyClass::count;
int main() {
MyClass a, b, c; cout << "There are now " << MyClass::numObjects() << " in existence.\n\n"; MyClass *p = new MyClass(); cout << "there are now " << MyClass::numObjects() << " in existence.\n\n"; delete p; cout << " there are now " << a.numObjects() << " in existence.\n\n"; return 0;
}</source>
Constructing object 1 Constructing object 2 Constructing object 3 There are now 3 in existence. Constructing object 4 there are now 4 in existence. Destroying object 4 there are now 3 in existence. Destroying object 3 Destroying object 2 Destroying object 1
name conflicts
<source lang="cpp">/* The following code example is taken from the book
* "C++ Templates - The Complete Guide" * by David Vandevoorde and Nicolai M. Josuttis, Addison-Wesley, 2002 * * (C) Copyright David Vandevoorde and Nicolai M. Josuttis 2002. * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. */
- include <iostream>
int C; class C {
private: int i[2]; public: static int f() { return sizeof(C); }
}; int f() {
return sizeof(C);
} int main() {
std::cout << "C::f() = " << C::f() << "," << " ::f() = " << ::f() << std::endl;
}</source>
C::f() = 8, ::f() = 4
Static method and static variable
<source lang="cpp">#include <iostream> using namespace std; class MyClass {
static int a; int b; public: void set(int i, int j){ a=i; b=j; } static void show();
}; int MyClass::a; void MyClass::show(){
cout << "This is static a: " << a << endl;
} int main(void) {
MyClass x, y; x.set(1,1); y.set(2,2); MyClass::show(); y.show(); x.show();
}</source>