Refer to static variable through its class name
#include <iostream>
using namespace std;
class MyClass {
public:
static int num;
void display() { cout << num << endl; }
};
int MyClass::num; // define num
int main()
{
MyClass a, b;
// Set num through its class name.
MyClass::num = 100;
a.display();
b.display();
// Set num through an object.
a.num = 200;
a.display();
b.display();
return 0;
}
100
100
200
200
static data members
#include <iostream>
class MyClass
{
public:
MyClass(int age = 1):intValue(age){
InstanceCount++;
}
virtual ~MyClass() {
InstanceCount--;
}
virtual int getValue() {
return intValue;
}
virtual void setValue(int age) {
intValue = age;
}
static int InstanceCount;
private:
int intValue;
};
int MyClass::InstanceCount = 0;
int main()
{
const int count = 5;
MyClass *MyClassHouse[count];
int i;
for (i = 0; i<count; i++)
MyClassHouse[i] = new MyClass(i);
for (i = 0; i<count; i++)
{
std::cout << "There are ";
std::cout << MyClass::InstanceCount;
std::cout << " left!\n";
std::cout << "Deleting the one which is ";
std::cout << MyClassHouse[i]->getValue();
delete MyClassHouse[i];
MyClassHouse[i] = 0;
}
return 0;
}
There are 5 left!
Deleting the one which is 0There are 4 left!
Deleting the one which is 1There are 3 left!
Deleting the one which is 2There are 2 left!
Deleting the one which is 3There are 1 left!
Deleting the one which is 4
Use a static instance variable
#include <iostream>
using namespace std;
class MyClass {
static int num;
public:
void setI(int i) { num = i; };
void display() { cout << num << " "; }
};
int MyClass::num; // define num
int main()
{
MyClass a, b;
a.display(); // prints 0
b.display(); // prints 0
a.setI(10); // set static num to 10
a.display(); // prints 10
b.display(); // also prints 10
return 0;
}
0 0 10 10