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

发表于:2014-3-17 10:22

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:maxiaoyun2012    来源:51Testing软件测试网采编

  首先要知道
  1:静态函数和非静态的区别
  2:静态成员和非静态成员的区别
  如下
  1: 静态成员和非静态成员的区别。
  静态成员不是某对象私有的(所有对象共有,修改一个对象的静态成员,其他所有的都修改,同时这也是RTTI的原理),他要求在声明时初始化(不能在类作用域内初始化),并且, 这个成员也不计算在calss的大小里面(你可以做实验。或者参考Inside The C++ Object Model)
  也就是,即使对象不存在,这个静态成员也就存在了,而其他的非静态成员只有在对象存在的时候,非静态成员才存在(这里的存在是指有内存被分配)
  2: 静态函数和非静态函数
  静态成员函数,你可以理解成全局函数(这是错误的,但是在浅层次来说,是一样的),他属于类,但是不属于某一对象的私有函数,
  也就是说,如下代码是错误的
  例如
ClassTest
{
。。。。。。。。
public:
staticvoidDisplay(){。。。。。}
};
Testt;
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);
}
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号