static, const

static 静态的,类的静态成员函数,静态成员变量是和类相关的,但不和具体对象相关。即使没有具体对象,也能调用类的静态成员函数和成员变量。一般类的静态函数就是一个全局函数,只是作用域在包含它的文件中。static 静态成员变量不能在类的内部初始化。在类的内部只声明,定义必须在类的外部。如 int Student:: rate=0.5;

static 定义的静态常量在函数执行后不会释放存储空间。

const成员变量也不能在类定义处初始化,只能通过构造函数初始化列表进行,必须有构造函数。

const 只在对象生存期内是常量。不同对象的const数据成员的值是不同的。所以不能在类的声明中初始化const数据成员。

cosnt成员函数主要目的是防止成员函数修改对象的内容。即const成员函数不能修改成员变量的值,但可以访问成员变量。

static成员函数主要目的是作为类作用域的全局函数。不能访问类的非静态数据成员。类的静态成员函数没有this指针,这导致:不能直接存取类的非静态成员变量,调用非静态成员函数2、不能被声明为virtual

class Test{  
public:  
    Test():a(0){}  
    enum {size1=100,size2=200};  
private:  
    const int a;//只能在构造函数初始化列表中初始化  
    static int b;//在类的实现文件中定义并初始化  
    conststatic int c;//与 static const int c;相同。  
};  
   
int Test::b=0;//static成员变量不能在构造函数初始化列表中初始化,因为它不属于某个对象。  
cosnt intTest::c=0;//注意:给静态成员变量赋值时,不需要加static修饰符,但要加cosnt。 

http://blog.csdn.net/tobefxz/article/details/14109697

在类中,静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。因此,静态成员是类的所有对象中共享的成员,而不是某个对象的成员。 使用静态数据成员可以节省内存,因为它是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。静态数据成员的值对每个对象都是一样,但它的值是可以更新的。只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值,这样可以提高时间效率。

静态成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式如下:

    <数据类型><类名>::<静态数据成员名>=<值>

原文地址:https://www.cnblogs.com/fanhaha/p/7117874.html