博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
静态成员函数调用非静态成员变量-p…
阅读量:4051 次
发布时间:2019-05-25

本文共 797 字,大约阅读时间需要 2 分钟。

C++会区分两种类型的成员函数:静态成员函数和非静态成员函数。这两者之间的一个重大区别是,静态成员函数不接受隐含的this自变量。所以,它就无法访问自己类的非静态成员。 

  

在某些条件下,比如说在使用诸如pthread(它不支持类)此类的多线程库时,就必须使用静态的成员函数,因为其地址同C语言函数的地址兼容。这种铜限制就迫使程序员要利用各种解决办法才能够从静态成员函数访问到非静态数据成员。 


第一个解决办法是声明类的所有数据成员都是静态的。运用这种方式的话,静态的成员函数就能够直接地访问它们,例如: 


class   Singleton 


  public: 

    static   Singleton   *   instance(); 

private: 

    Singleton   *   p; 

    static   Lock   lock; 

}; 


Singleton   *   Singleton::instance() 


  lock.getlock();   //   fine,   lock   is   static 

  if   (!p) 

    p=new   Singleton; 

  lock.unlock(); 

  return   p; 



这种解决方法不适用于需要使用非静态数据成员的类。 


访问非静态数据成员 


将参照传递给需要考量的对象能够让静态的成员函数访问到对象的非静态数据: 


class  


public: 

    static   void   func(A   &   obj); 

    intgetval()   const;   //non-static   member   function 

private: 

  intval; 

}; 


静态成员函数func()会使用参照obj来访问非静态成员val。 


voidA::func(A   &   obj) 


    int   n   =   obj.getval(); 



将一个参照或者指针作为静态成员函数的自变量传递,就是在模仿自动传递非静态成员函数里this自变量这一行为。

转载地址:http://tvpci.baihongyu.com/

你可能感兴趣的文章
LED恒流驱动芯片
查看>>
驱动TFT要SDRAM做为显示缓存
查看>>
使用file查看可执行文件的平台性,x86 or arm ?
查看>>
qt 创建异形窗体
查看>>
简单Linux C线程池
查看>>
内存池
查看>>
GNU hello代码分析
查看>>
Qt继电器控制板代码
查看>>
wpa_supplicant控制脚本
查看>>
gstreamer相关工具集合
查看>>
RS232 四入四出模块控制代码
查看>>
linux 驱动开发 头文件
查看>>
container_of()传入结构体中的成员,返回该结构体的首地址
查看>>
ipconfig,ifconfig,iwconfig
查看>>
opensuse12.2 PL2303 minicom
查看>>
网络视频服务器移植
查看>>
Encoding Schemes
查看>>
移植QT
查看>>
如此调用
查看>>
计算机的发展史
查看>>