C++类内静态函数和静态成员的小例子

摘自soso问问的一个帖子,正好遇到这个问题,就转载一下。

http://wenwen.soso.com/z/q230478199.htm


首先要知道

1:静态函数和非静态的区别

2:静态成员和非静态成员的区别

 

如下

1: 静态成员和非静态成员的区别。

        静态成员不是某对象私有的(所有对象共有,修改一个对象的静态成员,其他所有的都修改,同时这也是RTTI的原理),他要求在声明时初始化(不能在类作用域内初始化),并且, 这个成员也不计算在calss的大小里面(你可以做实验。或者参考Inside The C++ Object Model)

     也就是,即使对象不存在,这个静态成员也就存在了,而其他的非静态成员只有在对象存在的时候,非静态成员才存在(这里的存在是指有内存被分配)

2: 静态函数和非静态函数

      静态成员函数,你可以理解成全局函数(这是错误的,但是在浅层次来说,是一样的),他属于类,但是不属于某一对象的私有函数,

也就是说,如下代码是错误的

   例如

      Class Test

    {

        。。。。。。。。

      public:

            static void Display(){。。。。。}

    };

    Test t;

    t.Display();    // 错误,Display是静态函数,不是某一对象的私有成员,不能这么调

      同样, 既然上边讲他不属于类,类似全局函数,那么函数的实现里面如果用到变量,这个变量必须已经存在(内存分配)也就是说,他的实现内不内直接调用非静态成员(因为对象不存在时候,非静态成员也不存在),

最后, 下边例子可能比较说明问题。

int g_i = 0;

class Test

{

private:

    int  m_nTestA;

    static int m_nstaticB;

public:

    Test(){ m_nTestA = 0;}

    ~Test(){}

    static void DisPlay(Test *pTest)

{

    //cout<<m_nTestA<<endl; 错误调用,见编译器错误输出。

    cout<<g_i <<endl;

    cout<<pTest->m_nTestA<<endl;

}

}

int Test ::m_nstaticB = 0;

void main()

{

Test T;

//T.Display(...) 错误 见编译器输出

Display (&T);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值