思考:每个变量,拥有属性。有没有一些属性,归所有对象拥有?
静态成员变量
1)定义静态成员变量
关键字 static 可以用于说明一个类的成员,
静态成员提供了一个同类对象的共享机制
把一个类的成员说明为 static 时,这个类无论有多少个对象被创建,这些对象共享这个 static 成员
静态成员局部于类,它不是对象成员
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
class BB {
public:
void printC()
{
cout << "c: " << c << endl;
}
void AddC()
{
c = c + 1;
}
private:
int a;
int b;
static int c;
};
int BB::c = 10; //静态变量必须单独初始化
void main()
{
BB b1, b2, b3; //静态变量c是b1. b2, b3公用的
b1.printC(); //c = 10
b2.AddC(); //c = 11
b3.printC(); //c = 11
system("pause");
}
静态成员函数
1)概念
静态成员函数数冠以关键字static
静态成员函数提供不依赖于类数据结构的共同操作,它没有this指针
在类外调用静态成员函数用 “类名 :: ”作限定词,或通过对象调用
2)案例
3)疑难问题:
静态成员函数中,不能使用普通变量。
//静态成员变量属于整个类的,分不清楚,是那个具体对象的属性。
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
class BB {
public:
void printC()
{
cout << "c: " << c << endl;
}
static void getC() //静态成员函数
{
cout << "c: " << c << endl;
//请问:在·静态成员函数中能调用普通成员变量和普通成员函数吗?
cout << "a: " << a << endl; //答案:不能 静态函数中,只能使用公共的资源 编译器不能分辨a是哪一个对象的
}
void AddC()
{
c = c + 1;
}
private:
int a;
int b;
static int c; // 静态成员变量
};
int BB::c = 10; //静态变量必须单独初始化
void main()
{
BB b1, b2, b3; //静态变量c是b1. b2, b3公用的
b1.printC(); //c = 10
b2.AddC(); //c = 11
b3.printC(); //c = 11
b1.getC(); //用对象调用
BB::getC(); //用类名调用
system("pause");
}