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

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

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

当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享.各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有一个实例存在,与定义了多少类对象无关.静态方法就是与该类相

属于类的成员函数

静态成员变量可以看作是全局变量,整个函数都可以使用.如果在类中定义静态成员变量,那这个成员变量只能被类自身调用,但不能被类的成员调用.

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

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