A static member functions
#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;
}
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
/* 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;
}
C::f() = 8, ::f() = 4
Static method and static variable
#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();
}