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或枚举类型的,可以在类声明中初始化。

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

 

 

2,静态成员函数

可以将成员函数静态的(static):在函数声明的时候必须包含关键字static,如果函数是单独定义的,则不必包含关键字static。

静态数据成员有两个重要的特点:

1,不能使用对象来调用静态数据成员,实际上静态成员函数甚至不能使用this指针。如果静态成员函数是在共有部分声明的,则可以使用限定名称来调用它(类名加作用于解析运算符)。

2.静态成员函数不与特定的对象关联,只能使用静态数据成员。

posted @ 2016-05-29 00:42  ForAnything  阅读(388)  评论(0)    收藏  举报