static

来源:互联网 发布:上海行知实验学校 编辑:程序博客网 时间:2024/06/07 07:21
一、使用 static 成员而不是全局对象有三个优点。 
1.  static 成员的名字是在类的作用域中,因此可以避免与其他类的成员或全局对象名字冲突。 
2. 可以实施封装。static 成员可以是私有成员,而全局对象不可以。 
3. 通过阅读程序容易看出 static 成员是与特定类关联的。 这种可见性可清晰地显示程序员的意图。




二、static 成员是类的组成部分但不是任何对象的组成部分,因此,static 成员函数没有 this 指针。 通过使用非 static 成员显式或隐式地引用 this 是一个编译时错误。 


因为 static 成员不是任何对象的组成部分,所以 static 成员函数不能被声明为 const。毕竟,将成员函数声明为 const 就是承诺不会修改该函数所属的对象。 最后, static 成员函数也不能被声明为虚函数。


1.依然可以声明为static const成员函数
#include "stdafx.h"
#include <iostream>
using namespace std;


class MyClass
{
public:
static const void Out(){cout<<iNumber<<endl;};
private:
const static int iNumber = 10;
};


void _tmain(int argc, _TCHAR* argv[])
{
MyClass mc;
mc.Out();
}


2.static成员函数不允许使用this指针
class MyClass
{
public:
static const void Out(){cout<<this->iNumber<<endl;};//错误
private:
const static int iNumber = 10;
};


void _tmain(int argc, _TCHAR* argv[])
{
MyClass mc;
mc.Out();
}




3.const static 数据成员就可以在类的定义体中进行初始化
class MyClass
{
private:
const static int iNumber = 10;
};
0 0
原创粉丝点击