您的位置:首页 > 其它

静态和非静态成员,函数之间到底区别在哪里

2015-03-24 14:35 267 查看
在看OC的方法时,出了点疑惑,类方法和实例方法的区别到底在哪里?

类似于C++中的定义,类方法类似于静态成员函数;实例方法类似于费静态成员函数。二者的区别在哪里呢?

1)静态变量是属于类的,只能用classname::来调用.而非静态是属于对象的,必须通过对象来调用.
2)如果在函数中声明一个静态变量的话,它存储在非函数的活动区.就是它不随函数调用的结束而释放内存空间,所以它也具有全局变量的特点.但是和全局变量相比不同在于它只能在本文件中使用.就是你不能这样写extern static variable.而全局变量是可以在其它文件中看到的.

至于为什么要有静态成员?

对于类的数据成员来说,如果是静态的,那么他将是类的一部分,为所有实例共享,如果是非静态的,则每个实例有一份考贝。例如,银行把用户组织成一个类来管理,这个类里包括用户名,余额,银行的利率等变量,其中这个利率是经常会更新的,如果把它设成非静态的,一旦要更新利率,那么就得把所有用户全调出来修改利率的值,光是这个操作就会非常耗时,如果是静态的,那么这个利率就是类的一部分,被所有实例(用户)共享,只需要一次更新就可以调整所有用户的利率了。这就是它的好处。因为已经说过静态变量是类的一部分,所以在产生这个类的任何实例前,它就已经存在,可以通过类名:静态变量名来操作。希望我的回答能让你满意。

至于静态类成员函数,静态函数只有当程序结束的时候才从内存消失。而非静态则是动态加载到内存,不需要的时候就从内存消失。一般存放在堆或者栈中。

据个例子,调用类中的静态函数,你不需要创建对象就可以调用。而对于非静态的函数,你必须要先创建对象,才能够由对象调用。
Class::func() //对于静态函数不创建对象,可以这样调用,而非静态必须创建对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: