C++类内静态函数和静态成员的小例子
作者:网络转载 发布时间:[ 2014/3/17 10:30:42 ] 推荐标签:C++ 静态 函数
首先要知道
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/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11