静态成员变量不专属于某个对象,他属于整个类中所有对象的成员变量,在实例化一个对象的时候可能无法给它开辟内存,因此我们需要在全局为他开辟内存。
#include<iostream>
using namespace std;
class A
{
public:
static int count;
A(int i):key(i)
{
count++;
cout<<"构造函数!"<<endl;
}
~A()
{
count--;
cout<<"析构函数!"<<count<<endl;
}
int Getkey()
{
return key;
}
int GetCount()
{
return count;
}
private:
int key;
};
int A::count=0;
int main()
{
A a(5);
cout<<a.Getkey()<<" "<<a.GetCount()<<endl;
A b(6);
//可以直接用类名去访问静态成员变量
cout<<A::count<<endl;
cout<<b.GetCount()<<endl;
return 0;
}
#include<iostream>
using namespace std;
class A
{
public:
static int count;
A(int i):key(i)
{
count++;
cout<<"构造函数!"<<endl;
}
~A()
{
count--;
cout<<"析构函数!"<<count<<endl;
}
int Getkey()
{
return key;
}
int GetCount()
{
return count;
}
private:
int key;
};
int A::count=0;
int main()
{
A a(5);
cout<<a.Getkey()<<" "<<a.GetCount()<<endl;
A b(6);
//可以直接用类名去访问静态成员变量
cout<<A::count<<endl;
cout<<b.GetCount()<<endl;
return 0;
}
静态成员函数不能访问普通成员变量以及普通成员函数,但是可以访问静态成员变量和静态成员函数。因为静态成员函数是属于整个类的,所以他不能访问某个对象的 成员变量,因为它没有this指针,但是他可以访问静态成员函数和静态成员变量。
#include<iostream>
using namespace std;
class A
{
public:
A(int i):key(i)
{
count++;
cout<<"构造函数!"<<endl;
}
~A()
{
count--;
cout<<"析构函数!"<<count<<endl;
}
int Getkey()
{
return key;
}
static int GetCount()
{
return count;
}
static void Show()
{
cout<<count<<endl;
count++;
//需要讲GetCount变成static才能被Show访问
cout<<GetCount();
}
private:
int key;
static int count;
};
int A::count=10;
int main()
{
A::Show();
A a(5);
cout<<a.Getkey()<<" "<<a.GetCount()<<endl;
A b(6);
cout<<b.GetCount()<<endl;
return 0;
}
但是静态成员变量可以被常规成员函数所访问:
#include<iostream>
using namespace std;
class A
{
private:
static int a;
int b;
public:
A(int num):b(num){}
void fun()
{
cout<<a<<endl;
cout<<b<<endl;
}
static void fun2()
{
cout<<a<<endl;
// cout<<b<<endl;
}
};
int A::a=8;
int main()
{
A ob(4);
ob.fun();
ob.fun2();
}