C++笔记(十六)——静态类成员和动态类成员

古城微笑少年丶 2022-05-09 16:16 327阅读 0赞

一、类的静态成员变量

  1. 静态类成员是在类成员定义前使用**static**关键字标识。在定义静态数据成员时,通常需要**在类内声明,在类体外部**对**静态数据成员**进行**初始化**。**对于静态成员来说,不仅可以通过对象访问,还可以直接使用类名访问。**
  2. class CNote
  3. {
  4. public:
  5. static unsigned int m_Price; //在类内声明
  6. };
  7. unsigned int CNote::m_Price = 20;//在类外初始化成员
  8. int main(int argc, char* argv[])
  9. {
  10. CNote note;
  11. cout << note.m_Price << "\n";//通过对象访问
  12. cout << CNote::m_Price << "\n";//通过类名直接访问
  13. return 0;
  14. }

70

注:通过对象去使用静态成员是不规范的,应该用“类+成员名”调用的形式

像上面的demo:

  1. main函数中
  2. {
  3. CNote::m_y = 20; //静态数据可以通过类名称直接访问(该方法更规范)
  4. cout << "m_y = " << CNote::m_y << endl;
  5. return 0;
  6. }

在一个类中,静态数据成员是被所有的类对象所共享的。这就意味着无论定义多少个类对象,类的静态数据成员只有一份,同时,如果某一个对象修改了静态数据成员,其他对象的静态数据成员(实际上是同一个静态数据成员)也将改变。

  1. class CNote
  2. {
  3. public:
  4. static unsigned int m_Price;
  5. };
  6. unsigned int CNote::m_Price = 20;
  7. int main(int argc, char* argv[])
  8. {
  9. CNote note;
  10. CNote vnote;
  11. note.m_Price = 30;//修改数据后
  12. cout << note.m_Price << "\n";
  13. cout << vnote.m_Price << "\n";//它也变了
  14. return 0;
  15. }

70 1

1. 静态数据成员可以是当前类的类型,而其他数据成员只能是当前类的指针或引用类型。

2. 在定义类的成员函数时,可以为成员函数指定默认参数,其参数的默认值也可以是类的静态数据成员,但是普通的数据成员则不能作为成员函数的默认参数。

二、类的静态成员函数

  1. 定义类的静态成员函数与定义普通的成员函数类似,只是在成员函数前添加static关键字。静态成员函数既可以用

1.类的静态成员函数只能访问类的静态数据成员,而不能访问普通的数据成员。

2. 对于静态成员函数不能定义为**const成员函数,即静态成员函数末尾不能使用const**关键字。

3. 在定义静态数据成员函数时,如果函数的实现代码处于类体之外,则在函数的实现部分**。**

  1. **类定义**以及**相关的常数值**或**typedef名**通常都**存储在头文件中(.h文件)**,并且**头文件以类名来命名**。因此,假如我们创建一对头文件:IntArray.hMatrix.h,则所有打算使用IntArray类或Matrix类的程序就必须包含相关的头文件。
  2. 类似的,**不在类定义内部定义**的**类成员函数**都存储在**与类名同名**的**程序文本文件(.C文件)**中。例如,我们将创建一对程序文本文件:IntArray.cMatrix.c,用来存储相关类的成员函数。

发表评论

表情:
评论列表 (有 0 条评论,327人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C++】静态成员

    类中静态成员的特点是:无论创建了多少对象,程序都只创建一个静态类变量副本。也就是说,类的所有对象共享同一个静态成员,就像家中的电话可被全体家庭使用一样。 但是注意,不能在类