静态成员函数不可以访问类中的成员变量

原因:因为静态成员函数在类对象构造时没有分配this指针(非静态成员函数则具有this指针),相当于是全局函数,是属于类的,而类的成员变量只有类对象(实例)能够访问,成员变量只有实例化才有意义。
解决办法:静态成员函数增加一个类的指针或引用作为参数。如

class Foo
{
    int m_f;
public:
    static void f()
    {
        m_f=666;   //这是非法的,这个等价于this->m_f=666,而静态方法没有this
    }
    static void f(Foo&a)
    {
        a.m_f=666;   //这样就可以
    }
};

调用静态成员函数无需传入对象指针的办法

通过map保存类对象

typedef map<int,A*> CAMAP;
  class A()
  {
  public:
      static void func(); //静态成员函数     
  private:
      int m_ID;  //本对象在列表中的ID号      
      static CAMAP m_Map; //对象映射表,静态

      float value;   //非静态成员变量
      float func1();  //非静态成员函数
  };
  CAMap A::m_Map;    //默认构造map 
  A::A()   //将对象保存至m_Map中
  {
      if(m_Map.IsEmpty())
      {
          m_ID=0;
      }
      else
      {
         m_ID=m_Map.size()+1;
      }
      m_Map.insert(make_pair<int,A*>(m_ID,this));
  }
  A::~A()   //将对象从m_Map中删除
  {
      m_Map.erase(m_ID);
  }  
  void A::func()
  {
      if (m_Map.IsEmpty()) 
          return;
      A* pThis = m_Map[m_ID];  //获取当前对象指针
      if( pThis != NULL)
      {
         pThis->value = pThis->b(); //调用非静态函数成员 
      }
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值