java 类的静态成员员与一般成员有哪些异同

博客访问: 51229
博文数量: 17
博客积分: 365
博客等级: 一等列兵
技术积分: 191
注册时间:
分类: C/C++ 14:47:04
静态函数只有当程序结束的时候才从内存消失。而非静态则是动态加载到内存,不需要的时候就从内存消失。eg:调用类中的静态函数,你不需要创建对象就可以调用。而对于非静态的函数,你必须要先创建对象,才能够由对象调用。
Class::func() //对于静态函数不创建对象,可以这样调用,而非静态必须创建对象。从对象的角度来说:&&&&静态函数是公共的.常成员函数不是公共的.&&&&静太函数好比房子.常成员函数好比你们每个家人的衣服.从应用方面来说:&&&&静态成中函数中能用静态成员,还可以用具体对象的函数.&&&&例如:&&&&&&&&对象&a;//&对象不一定要静态的;&&&&&&&&成员函数:&print()&&//也不一定要静态的;&&&&&&&&a.print()
阅读(2922) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
请登录后评论。20:55 提问
C++类中定义的静态成员变量的值在不同文件中相互影响(不是说类的代码区属于文件作用域吗)
class book
int showbnum();
int shownum();
int shownum1();
#include"classdef.h"
int main(void)
cout&&"stu:"&&shownum()&&
cout&&"tech:"&&shownum1()&&
system("pause");
//分别在两个文件中调用类的静态成员变量
#include"classdef.h"
int shownum()
cout&&&book::shownum&&
book::shownum=222;
return book::
//分别在两个文件中调用类的静态成员变量
#include"classdef.h"
int shownum1()
cout&&&book::shownum&&
book::shownum=666;
return book::
按赞数排序
两个文件中调用了吗???
其实静态成员变量只是类中的一个说法而已,其本质和全局变量没有多大的区别,他在可执行文件和内存中都是属于数据段,public性质的静态成员那么任何函数都可以进行访问,所以静态成员变量一般用于对于类实例的一个计数或者其他关于类实例的一个属性,很少用于其他用途。
没看懂你的代码想表达的意思是什么?
还有你说的相互影响是什么意思?
你认为的是这个静态变量属于文件是指 这个变量就只能在这个文件修改还是什么意思?
类这个东西其实就是编译和连接的时候有限定吧,正在运行的时候 没有类的 概念
对于类中的静态变量,只有唯一的一个实体,任何一个地方修改了此值,都会导致其它地方读此值时其值的变化。
计数器,用的就是这种方法。
class book
int showbnum();
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐08-2009-0609-1507-31
03-2309-0203-2409-09
也许你感兴趣
1. 2. 3. 4. 5. 6. 7. 8. 9. 10.扫一扫体验手机阅读
静态成员与实例成员的区别
静态成员具有下列特征:
— 静态成员必须通过类名使用 . 运算符来引用,而不能用对象来引用。
— 一个静态字段只标识一个存储位置。无论创建了一个类的多少个实例,它的静态字段在内存中都只占同一块区域。
— 静态函数成员(方法、属性、事件、运算符或构造函数)不能作用于具体的实例,在这类函数成员中不能直接使用实例成员,必须通过类名来引用。
实例成员具有以下特点:
— 实例成员必须通过对象名使用 . 运算符来引用,而不能用类名来引用。
— 类的实例字段属于类的实例所有,每创建一个类的实例,都在内存中为实例字段开辟了一块区域。类的每个实例分别包含一组该类的所有实例字段的副本。
— 实例函数成员(方法、属性、索引器、实例构造函数或析构函数)作用于类的给定实例,在它们的代码体内可以直接引用类的静态和实例成员。
其实,我们在前面的几章中大量使用的Console类的WriteLine等方法都是静态方法,都是通过类名Console来引用的。
类的静态成员每个类只有一个,非静态成员每个对象一个.若将类中的某个成员声明为static&& 该成员称为静态成员,类中的成员要么是静态 要么是非静态的,一般说来静态成员是属于类所有的,非静态成员则属于类的实例 对象
理解下面的代码,体会静态成员和实例成员的使用方法:
class Test
&&&&&&&&&&&&&&& // 实例字段
&&&&&&&&&&& // 静态字段
&&& void F()&&&&&&&&&&&&& // 实例方法
&&&&&&& x = 1;&&&&&& &&&&& // 正确:实例方法内可以直接引用实例字段
&&&&&&& y = 1;&&&&&& &&&&& // 正确:实例方法内可以直接引用静态字段
&&& static void G()&&&&&& // 静态方法
&& &&&&&x = 1;&&&&&& &&&&& // 错误:静态方法内不能直接引用实例字段
&&&&&&& y = 1;&&&&&& &&&&& // 正确:静态方法可以直接引用静态字段
&&& static void Main()&&&&&& // 静态方法
&&&&&&& Test t = new Test();& // 创建对象
&&&&&&& t.x = 1;&&&&&&& && // 正确:用对象引用实例字段
&&&&&&& t.y = 1;&&&&&&& && // 错误:不能用对象名引用静态字段
&&&&&&& Test.x = 1;&&&& && // 错误:不能用类名引用实例字段
&&&&&&& Test.y = 1;&&&& && // 正确:用类名引用静态字段
&&&&&&& t.F();&&&&&& &&&&& // 正确:用对象调用实例方法
&&&&&&& t.G();&&&&&& &&&&& // 错误:不能用对象名调用静态方法
&&&&&&& Test.F();&&& &&&&& // 错误:不能用类名调用实例方法
&&&&&&& Test.G();&&& &&&&& // 正确:用类名调用静态方法
注意& 上述代码中,Main也是Test类的静态方法,可以在其中直接使用静态成员,而不需要使用类名来引用。
下面的程序演示了静态字段的性质:
// StaticMember.cs
// 静态字段的例子
public class Count
&&& public Count()
&&&&&&& count = count + 1;
&&&&&&& number =
&&& public void show()
&&&&&&& Console.WriteLine("object{0} : count={1}", number, count);
class Test
&&& public static void Main()
&&&&&&& Count a = new Count();
&&&&&&& a.show();
&&&&&&& Console.WriteLine("-----------------");
&&&&&&& Count b = new Count();
&&&&&&& a.show();
&&&&&&& b.show();
&&&&&&& Console.WriteLine("-----------------");
&&&&&&& Count c = new Count();
&&&&&&& a.show();
&&&&&&& b.show();
&&&&&&& c.show();
其输出结果为:
object1 : count=1
-----------------
object1 : count=2
object2 : count=2
-----------------
object1 : count=3
object2 : count=3
object3 : count=3
从上面的例子中可以看出,无论何时,类的所有实例的静态字段count的值都是相同的,一个实例改变了它的值,其他实例得到的值也将随之变化,说明所有实例都使用同一个count字段;而每个实例的成员字段number的值都是不同的,也不能被其他的实例化改变。
&&& 类的非静态成员属于类的实例所有每创建一个类的实例都在内存中为非静态 成员开辟了一块区域而类的静态成员属于类所有为这个类的所有实例所共享无 论这个类创建了多少个副本一个静态成员在内存中只占有一块区域。
<span type="1" blog_id="338636" userid='
分享到朋友圈
关注作者,不错过每一篇精彩静态成员函数和静态成员变量和普通函数和变量有哪些具体的区别?【c++吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:302,611贴子:
静态成员函数和静态成员变量和普通函数和变量有哪些具体的区别?收藏
阿狸镇楼。刚学完这一章,对静态函数和成员的概念都比较模糊,说不出个所以然来突然他们有哪些区别呢?求大神说说
我目前了解一点点静态成员函数和变量可以被类里实例化函数调用,但是静态称号函数和成员变量不能调用他们。静态成员变量的值再类中所有对象里都是一样的。静态成员函数在实例化前就有内存,就能调用,而其他函数必须实例化后才能调用。
目前我就知道这些了,我知道还有很多,求吧友们给我说说。
好 好帖 很好帖 确实好帖 少见的好帖 真是TMD 好帖 难得一见的好帖 千年等一回的好帖 好得不能再好的好帖 惊天地且泣鬼神的好帖 让人阅毕击掌三叹的好帖 让人佩服得五体投地的好帖 让人奔走相告曰须阅读的好帖 让斑竹看后决定加精固顶的好帖 让人看后在各论坛纷纷转贴的好帖 让人看后连***都没兴趣的好帖 让人看完后就要往上顶往死里顶的好帖 让人看后不断在各种场合重复引用的好帖 让人一见面就问你看过某某好帖没有的好帖 让人半夜上厕所都要打开电脑再看一遍的好帖 让个读过后都下载在硬盘里详细研究欣赏的好帖 让人走路吃饭睡觉干什么事连做梦都梦到它的好帖 让人翻译成36种不同外语流传国内外世界各地的好帖 让人纷纷唱道过年过节不送礼要送就送某某帖子的好帖 让国家领导人命令将该帖刻在纯金版上当国礼送人的好帖 让网络上纷纷冒出该帖的真人版卡通版搞笑版成人版的好帖 让人在公共厕所里不再乱涂乱化而是纷纷对它引经据典的好帖 让某位想成名的少女向媒体说她与该帖作者发生过性关系的好帖 让人根据它写成小说又被不同导演拍成48个不同版本的电影的好帖 让某名导演跟据此帖改拍的电影在奥斯卡上一连拿了11个奖项的好帖 让人大代表们看完后联名要求根据该帖的内容对宪法做适当修改的好帖 让人为了谁是它的原始作者纷纷地闹上法院打官司要争得它的版权的好帖 让各大学府纷纷邀请该帖作者去就如何发表优秀网络文学为题目演讲的好帖 让人为了该帖而成立了各种学会来研究并为不同的理解争得眼红脖子粗的好帖 让美国警察于今后逮捕人说你有权保持沉默还有权阅读某某帖子要不要啊的好帖 让本拉登躲在山洞里还命令他手下冒着被美军发现的危险去上网下载来阅读的好帖 让萨达姆被捕时被发现他随身携带的除了一把手枪之外还有的就是它的复印件的好帖 让比尔盖茨在懂事会上发给与会者人手一份该帖命令仔细阅读后才讨论其他事宜的好帖 让诺贝儿奖理事会破天荒地因该帖的出现而开会讨论一直决定今后设立最佳帖子奖的好帖 让联合国安理会决定将它译成宇宙语由中国神州六号升空后不断播放看有没有外星人的好帖 让人看完后IE锁死连瑞星诺顿都没法修复只好格式化硬盘重装启动后主页显示的还是它的好帖
简单的说,静态的成员就是属于类本身,而不是某一个对象。静态成员的生命周期和其所属的类相同,即在程序运行后有这个类的时候操作系统就为这个类的静态成员分配了内存空间。
类似全局函数和全局变量,只是在类的名字空间下。
所谓的静态成员函数就是使用static关键字的成员函数。同静态数据成员一样,静态成员函数也属于整个类,由同一类的所有对象拥有,为这些对象所共享。静态成员函数的声明除了在类体中的函数声明前加上关键字static以及不能声明为const之外,与非静态成员函数相同。出现在类体外的函数定义不能指定关键字static。1)和静态数据成员一样,静态成员函数是类的一部分而不是对象的一部分。如果要在类外调用静态成员函数,即可用对象成员运算符方式也可以用类名和域运算符方式for example
Student::number
stu1.number(stud1是对象)2)静态成函数没有this指针(this指针存放当前对象的起始地址),因此在静态成员函数中隐式或显式地引用指针将会导致编译错误,所以静态成员函数不能引用非静态数据成员,只能引用静态数据成员。 注意:如果静态成员函数使用非静态成员时,必须通过参数传递方式得到对象名,然后可以通过对象名来访问。
登录百度帐号

我要回帖

更多关于 类的静态成员函数 的文章

 

随机推荐