一.声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的 成员函数,称之为静态成员函数。静态的成员变量一定要在类外进行初始化
class Test
{
private:
int m_data;
static int m_value;
};
int Test:: m_value = 0;
特性
1. 静态成员为所有类对象所共享,不属于某个具体的实例
2. 静态成员变量必须在类外定义,定义时不添加static关键字
3. 类静态成员即可用类名::静态成员或者对象.静态成员来访问
4. 静态成员函数没有隐藏的this指针,不能访问任何非静态成员
5. 静态成员和类的普通成员一样,也有public、protected、private3种访问级别,也可以具有返回值
另外,静态函数只能调静态成员,友元函数和静态函数都没有this指针。
二.构造函数初始化类的成员变量时,初始化其的顺序只与成员变量的声明顺序有关。
class A
{
public:
A(int a) :_a1(a), _a2(_a1)
{}
void Print() {
cout << _a1 << " " << _a2 << endl;
}
private:
int _a2;
int _a1;
};
int main() {
A aa(1);
aa.Print();
}
此时先给_a2赋值,再给_a1赋值,结果为
如果将 _a2, _a1声明顺序改变,结果为
三、c++11中类的成员变量可以给初始值。
四、一个函数可以是多个类的友元函数,需要向前声明。
五、内部类
class Test
{
public:
class Stu //STL iterator
{
public:
void show()
{
cout<<"aaaaaaaaaaa"<<endl;
}
private:
int m_x;
};
public:
void fun()
{
cout<<"bbbbbbbbb"<<endl;
}
private:
int m_a;
};
void main()
{
Test t;
t.fun();
Test::Stu s;
s.show();
}