C++笔记(十六)——静态类成员和动态类成员
一、类的静态成员变量
静态类成员是在类成员定义前使用**static**关键字标识。在定义静态数据成员时,通常需要**在类内声明,在类体外部**对**静态数据成员**进行**初始化**。**对于静态成员来说,不仅可以通过对象访问,还可以直接使用类名访问。**
class CNote
{
public:
static unsigned int m_Price; //在类内声明
};
unsigned int CNote::m_Price = 20;//在类外初始化成员
int main(int argc, char* argv[])
{
CNote note;
cout << note.m_Price << "\n";//通过对象访问
cout << CNote::m_Price << "\n";//通过类名直接访问
return 0;
}
注:通过对象去使用静态成员是不规范的,应该用“类+成员名”调用的形式
像上面的demo:
在main函数中
{
CNote::m_y = 20; //静态数据可以通过类名称直接访问(该方法更规范)
cout << "m_y = " << CNote::m_y << endl;
return 0;
}
在一个类中,静态数据成员是被所有的类对象所共享的。这就意味着无论定义多少个类对象,类的静态数据成员只有一份,同时,如果某一个对象修改了静态数据成员,其他对象的静态数据成员(实际上是同一个静态数据成员)也将改变。
class CNote
{
public:
static unsigned int m_Price;
};
unsigned int CNote::m_Price = 20;
int main(int argc, char* argv[])
{
CNote note;
CNote vnote;
note.m_Price = 30;//修改数据后
cout << note.m_Price << "\n";
cout << vnote.m_Price << "\n";//它也变了
return 0;
}
1. 静态数据成员可以是当前类的类型,而其他数据成员只能是当前类的指针或引用类型。
2. 在定义类的成员函数时,可以为成员函数指定默认参数,其参数的默认值也可以是类的静态数据成员,但是普通的数据成员则不能作为成员函数的默认参数。
二、类的静态成员函数
定义类的静态成员函数与定义普通的成员函数类似,只是在成员函数前添加static关键字。静态成员函数既可以用
1.类的静态成员函数只能访问类的静态数据成员,而不能访问普通的数据成员。
2. 对于静态成员函数不能定义为**const成员函数,即静态成员函数末尾不能使用const**关键字。
3. 在定义静态数据成员函数时,如果函数的实现代码处于类体之外,则在函数的实现部分**。**
**类定义**以及**相关的常数值**或**typedef名**通常都**存储在头文件中(.h文件)**,并且**头文件以类名来命名**。因此,假如我们创建一对头文件:IntArray.h和Matrix.h,则所有打算使用IntArray类或Matrix类的程序就必须包含相关的头文件。
类似的,**不在类定义内部定义**的**类成员函数**都存储在**与类名同名**的**程序文本文件(.C文件)**中。例如,我们将创建一对程序文本文件:IntArray.c和Matrix.c,用来存储相关类的成员函数。
还没有评论,来说两句吧...