1.基本
•Static成员函数没有this指针,可以通过类名::函数名(参数)的形式来调用。
2.
• 1)static成员的名字是在类的作用域中,因此可以避免与其他类的成员或全局对象名字冲突。
• 2)可以实施封装。Static成员可以是私有成员,全局对象不可以。???
• 3)通过阅读程序容易看出static成员是与特定类关联的。
3.•可以通过作用域操作符直接从类调用static成员,引用或指针调用。
4.•
当在类外部定义static成员是,无需重复指定static关键字,只出现在类定义体内部。
•static成员函数没有this指针。
•static成员函数不能声明为const,因为static成员函数不是任何对象的组成部分。(const对象调用const成员函数)
•static成员函数不能声明为虚函数。
5.
Static数据成员可以声明为任意类型,可以是常量、引用、数组、类类型。
static数据成员必须在类定义体的外部定义一次(仅一次)
static数据成员不是通过构造函数初始化,而是应该在定义时进行初始化。
static数据成员必须在类定义体的外部定义一次(仅一次)
static数据成员不是通过构造函数初始化,而是应该在定义时进行初始化。
6.静态成员只能通过静态成员函数访问。
7.Static数据成员的类型可以是该成员所属的类类型。非static成员被限定声明为自身类对象的指针或引用。例如:
- Class Bar{
- Private:
- static Bar mem1;
- Bar * mem2;
- Bar &mem3;
- Bar mem4;//error
- };
8.
非static数据成员不能用作默认实参。
如:
- class Screen
- {
- public:
- Screen& clear(char = bkground);
- private:
- char bkground = ‘#’;
- };
- //1>error C2864: “Screen::bkground”: 只有静态常量整型数据成员才可以在类中初始化
- //1>error C2648: “Screen::bkground”: 将成员作为默认参数使用要求静态成员
- class Screen
- {
- public:
- Screen& clear(char = bkground);
- private:
- static const char bkground = '#';
- };//不再报错
•Static成员是与类关联的,不与该类的对象关联。因此一个类的所有对象可以通过定义static成员共享数据。
•Static成员包括static成员变量和static成员函数。