sytn.net
当前位置:首页 >> 静态成员函数类外定义 >>

静态成员函数类外定义

静态成员不可在类体内进行赋值,因为它是被所有该类的对象所共享的.你在一个对象里给它赋值,其他对象里的该成员也会发生变化.为了避免混乱,所以不可在类体内进行赋值. 静态成员的值对所有的对象是一样的.静态成员可以被初始化,但只能在类体外进行初始化. 一般形式: 数据类型类名::静态数据成员名=初值 注意:不能用参数初始化表对静态成员初始化.一般系统缺省初始为0. 静态成员是类所有的对象的共享的成员,而不是某个对象的成员.它在对象中不占用存储空间,这个属性为整个类所共有,不属于任何一个具体对象.所以静态成员不能在类的内部初始化,比如声明一个学生类,其中一个成员为学生总数,则这个变量就应当声明为静态变量,应该根据实际需求来设置成员变量.

1.静态成员函数可以在类中被定义2.普通类成员函数与静态成员函数的区别在于普通成员函数有一个隐藏的调用参数(this)指针,也就是说,静态成员函数不属于任何对象,它只属于类,在内存中只有一份.

比如定义一个苹果,所有java教程中都会出现的例子.定义的是抽象的苹果,实例化后才是具体的某一个苹果,但是如果某些属性是不属于任何具体化苹果的,比如实例化苹果数量,某一种类苹果的价格---是属于苹果这个类的属性,这样的属性就需要用静态变量保存.当然实际也不是完全这样,不知道能不能帮助你理解?非静态函数是属于实例化对象的,没有实例化之前,不能使用的.因为他们是具体对象的动作.当然也可以定义静态函数,这个是类的动作.

这个很麻烦,不过不难.每次计算的时候,搞清楚各个值就好了.首先 func调用两次,参数都是主函数的k和m 这两个值是不变的.也就是说 两次都是func(4,1) 对于func 第一次 a=4 b=1 m=0 i=2 //初始化 i+=m+1 -> i=i+m+1=2+0+1=3 m=i+a+b=3+4+1=8 返回8 于是第一个printf输出8,第二次 a=4 b=1 m=8 i=3 //这两个变量是static 的,所以第二次进入的时候,m和i都是第一次退出时的值.i+=m+1 -> i=i+m+1=3+8+1=12 m=i+a+b=12+4+1=17 返回17 于是第二个printf输出17 选a

class A{public: static void func();};void A::func(){ //.实现}

static用法有很多.1.如果修饰全局变量,那么该全局静态变量仅能在本文件内进行访问.属于限定作用域的用途.2.如果修饰类的成员变量,那么该静态成员变量就会放到静态区进行存储,可以通过类名::的方式进行访问.3.如果修饰类的成员函数,那么该静态成员函数可以通过类型::的方式进行访问.4.如果修饰函数内的局部变量,那么该静态局部变量在类执行完毕后能够继续保存.下次执行该函数时,可以利用上次的结果.

static常用的两个作用,一个是作用域限制,一个是生存期限制.对函数来说:作用域限制:被static修饰的函数,只能用于代码本身文件的调用.生存期限制:对函数来说,这条是用来说类的静态成员函数的.在类对象出生前,类的静态成员函数就活着了.如果类外定义函数时在函数名前加了static,因为作用域的限制,就只能在当前cpp里用,类本来就是为了给程序里各种地方用的,与类的本意冲突,限制了类的自由.所以在类外实现类成员函数时,函数名前加个static修饰符就报错了.

在C++中静态成员函数也是类函数,及这个函数不属于某个具体的对象,而是属于一个类的,这个类实例化的每个成员都可用,同时,这个类也可以直接调用这个函数而不用实例化一个对象.

静态成员函数的定义与一般成员函数的定义相同,只是在其前面冠以static关键字,其定义格式如下 :class 类名{…static 类型 函数名(形参){ 函数体 }…};说明:(1)类的静态成员函数只能访问类的静态数据成员,而不能访问类中的普通函数成员(非静态数据成 员),因为普通数据成员只有类的对象存在时才有意义.(2)静态成员函数与类相联系,而不与类的对象相联系,所以,在类的外部调用类中的公有静态成员 函数,必须在其左面加上“类名::”,而不是通过对象名调用公有静态成员函数.在类的外 部不能调用类中的私有静态成员函数.

尽管都是静态变量,都是在程序一启动时就分配了内存空间,生命周期一样,但是作用域和可见性却不一样,类内部静态变量必须通过类名或者对象名去访问,对于private类型的静态变量你甚至只能通过公有成员函数去访问,当可以使用类名来引用该变量时,该变量在整个程序中都可见.而对于类外的静态变量(不是传统意义上的全局变量)只能在定义文件中使用,只在定义文件中可见,无法在非定义文件中使用.

网站首页 | 网站地图
All rights reserved Powered by www.sytn.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com