静态和非静态成员,函数之间到底区别在哪里
2015-03-24 14:35
267 查看
在看OC的方法时,出了点疑惑,类方法和实例方法的区别到底在哪里?
类似于C++中的定义,类方法类似于静态成员函数;实例方法类似于费静态成员函数。二者的区别在哪里呢?
1)静态变量是属于类的,只能用classname::来调用.而非静态是属于对象的,必须通过对象来调用.
2)如果在函数中声明一个静态变量的话,它存储在非函数的活动区.就是它不随函数调用的结束而释放内存空间,所以它也具有全局变量的特点.但是和全局变量相比不同在于它只能在本文件中使用.就是你不能这样写extern static variable.而全局变量是可以在其它文件中看到的.
至于为什么要有静态成员?
对于类的数据成员来说,如果是静态的,那么他将是类的一部分,为所有实例共享,如果是非静态的,则每个实例有一份考贝。例如,银行把用户组织成一个类来管理,这个类里包括用户名,余额,银行的利率等变量,其中这个利率是经常会更新的,如果把它设成非静态的,一旦要更新利率,那么就得把所有用户全调出来修改利率的值,光是这个操作就会非常耗时,如果是静态的,那么这个利率就是类的一部分,被所有实例(用户)共享,只需要一次更新就可以调整所有用户的利率了。这就是它的好处。因为已经说过静态变量是类的一部分,所以在产生这个类的任何实例前,它就已经存在,可以通过类名:静态变量名来操作。希望我的回答能让你满意。
至于静态类成员函数,静态函数只有当程序结束的时候才从内存消失。而非静态则是动态加载到内存,不需要的时候就从内存消失。一般存放在堆或者栈中。
类似于C++中的定义,类方法类似于静态成员函数;实例方法类似于费静态成员函数。二者的区别在哪里呢?
1)静态变量是属于类的,只能用classname::来调用.而非静态是属于对象的,必须通过对象来调用.
2)如果在函数中声明一个静态变量的话,它存储在非函数的活动区.就是它不随函数调用的结束而释放内存空间,所以它也具有全局变量的特点.但是和全局变量相比不同在于它只能在本文件中使用.就是你不能这样写extern static variable.而全局变量是可以在其它文件中看到的.
至于为什么要有静态成员?
对于类的数据成员来说,如果是静态的,那么他将是类的一部分,为所有实例共享,如果是非静态的,则每个实例有一份考贝。例如,银行把用户组织成一个类来管理,这个类里包括用户名,余额,银行的利率等变量,其中这个利率是经常会更新的,如果把它设成非静态的,一旦要更新利率,那么就得把所有用户全调出来修改利率的值,光是这个操作就会非常耗时,如果是静态的,那么这个利率就是类的一部分,被所有实例(用户)共享,只需要一次更新就可以调整所有用户的利率了。这就是它的好处。因为已经说过静态变量是类的一部分,所以在产生这个类的任何实例前,它就已经存在,可以通过类名:静态变量名来操作。希望我的回答能让你满意。
至于静态类成员函数,静态函数只有当程序结束的时候才从内存消失。而非静态则是动态加载到内存,不需要的时候就从内存消失。一般存放在堆或者栈中。
据个例子,调用类中的静态函数,你不需要创建对象就可以调用。而对于非静态的函数,你必须要先创建对象,才能够由对象调用。 Class::func() //对于静态函数不创建对象,可以这样调用,而非静态必须创建对象。
相关文章推荐
- 静态和非静态成员,函数之间到底区别在哪里了?
- 静态和非静态成员,函数之间到底区别在哪里了?
- C++中静态成员函数和非静态成员函数的区别
- 静态成员函数和非静态成员函数的区别?
- 静态成员函数和非静态成员函数的区别?
- c++ 静态成员函数和非静态成员函数的区别?
- 静态成员函数和非静态成员函数的区别
- 静态成员函数和非静态成员函数的区别?
- c++-静态成员函数和非静态成员函数的区别
- 类的静态成员函数以及与别的函数区别
- 静态成员和非静态成员的区别?
- 静态成员和非静态成员的区别
- 类成员函数的重载、覆盖与隐藏之间的区别总结
- 静态成员和非静态成员的区别
- 静态函数 静态数据成员与静态成员函数 为什么虚函数必须是非静态成员函数 构造函数能为static吗?
- 静态成员函数怎么引用该类中的非静态成员
- 静态成员和非静态成员的区别?
- 静态成员函数与普通成员函数的区别
- 静态成员和非静态成员的区别?
- .Net面试基础问答:静态成员和非静态成员的区别?