c++ 类的静态成员

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 类的静态成员相关的知识,希望对你有一定的参考价值。

1,静态数据成员

在c++中,类的静态数据成员由 static 标识,E.G:

class MyClass

{

private:

  static int Num ;

  double a;

  long b;

......  
}

Num被声明为Static的,静态数据成员有一些特点:无论创建多少个对象,都只有一个静态数据化成员的副本。也就是说,静态数据成员是属于类的,而不是每个对象都有一个静态数据成员,类的所有对象共享一个静态数据成员。比如说,我们创建两个MyClass对象,有2个a和b成员,但是只有一个共享的NUm,这个Num存储在额外的空间,而不是对象的组成部分。

静态数据成员的初始化:

  (1),初始化的位置

 我们应该方法定义文件中初始化,而不是在类声明文件中(头文件)。这是因为类声明位于头为念中,而头文件可能被包含在多个文件中,如果在头文件中出事话,将会出现多个初始化语句,编译器将会报错。

 (2)初始化的方法。

  指出数据类型,并使用了限定名称(类名+作用域解析运算符),但是不再需要关键字Static

  如:int MyClass::Num = 0;

注意事项:

1,不能在类声明中初始化静态数据成员,因为类声明只是描述了怎么分配内存,但是并不分配内存,也就是说,类声明只是声明了一种数据类型(用户自定义类型),就像int一样,我们可以像使用int等基本内置类型一样来使用类这种类型来定义变量。简单的说,MyClass就像int等,只有在定义变量的时候才分配内存。

2,不能使用构造函数来初始化静态数据成员,因为它是属于类的,而不是属于类的某个特定对象。

3,存在类外情况,静态数据成员是const或枚举类型的,可以在类声明中初始化。

  总的来说,静态数据成员在类的对象间共享,是属于类的,而不是属于类的对象。

 

以上是关于c++ 类的静态成员的主要内容,如果未能解决你的问题,请参考以下文章

C++中类的静态成员初始化

访问父类的成员“非静态数据成员的使用无效”C++

C++类的大小计算汇总

c++中类的静态数据成员

面向对象课后深入学习(C++ 类的静态成员详细讲解)

C++中类的静态数据成员函数解析