c++静态类 及 静态成员函数

来源:互联网 发布:linux make命令 编辑:程序博客网 时间:2024/05/01 07:36

转自:http://blog.csdn.net/hanwenhui3/article/details/50357537?locationNum=1
转自:

  1. 静态类相当于一个sealed abstract类,主要的一个优点是写在栈中,安全高速稳定,而且在执行的时候,十分优先。 类可以声明为 static 的,以指示它仅包含静态成员。不能使用 new 关键字创建静态类的实例。 使用静态类来包含不与特定对象关联的方法。例如,创建一组不操作实例数据并且不与代码中的特定对象关联的方法是很常见的要求。您应该使用静态类来包含那些方法。
  2. 它们仅包含静态成员。
    它们不能被实例化。
    它们是密封的。
    它们不能包含实例构造函数)。
    因此创建静态类与创建仅包含静态成员和私有构造函数的类大致一样。私有构造函数阻止类被实例化。
  3. 使用静态类的优点在于,编译器能够执行检查以确保不致偶然地添加实例成员。编译器将保证不会创建此类的实例。
    静态类是密封的,因此不可被继承。静态类不能包含构造函数,但仍可声明静态构造函数以分配初始值或设置某个静态状态。
  4. 静态类不能有实例构造器。
    静态类不能有任何实例成员。 静态类不能使用abstract或sealed修饰符。 静态类默认继承自System.Object根类,不能显式指定任何其他基类。
    静态类不能指定任何接口实现。
    静态类的成员不能有protected或protected internal访问保护修饰符。

静态类成员包括静态数据成员和静态函数成员两部分。

一 静态数据成员

类体中的数据成员的声明前加上static 关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态数据成员也遵守public/protected/private 访问规则。同时,静态数据成员还具有以下特点:

  1. 静态数据成员的定义

静态数据成员实际上是类域中的全局变量。所以,静态数据成员的定义( 初始化) 不应该被放在头文件中。
其定义方式与全局变量相同。举例如下:

xxx.h 文件
class base{
private:
static const int _i;// 声明,标准c++ 支持有序类型在类体中初始化, 但vc6 不支持。
};

xxx.cpp 文件
const int base::_i=10;// 定义( 初始化) 时不受private 和protected 访问限制.

注:不要试图在头文件中定义( 初始化) 静态数据成员。在大多数的情况下,这样做会引起重复定义这样的错误。即使加上#ifndef #define #endif 或者#pragma once 也不行。

  1. 静态数据成员被 类 的所有对象所共享(包括该类派生类的对象)

即派生类对象与基类对象共享基类的静态数据成员。举例如下:
class base{
public :
static int _num;// 声明
};
int base::_num=0;// 静态数据成员的真正定义

class derived:public base{
};

main()
{
base a;
derived b;
a._num++;
cout<<”base class static data number _num is”<

0 0
原创粉丝点击