C++静态成员
来源:互联网 发布:mac mysql dmg 安装 编辑:程序博客网 时间:2024/05/01 06:48
我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。
静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态成员放置在类的定义中,但是可以在类的外部通过使用范围解析运算符:: 来重新声明静态变量从而对它进行初始化,如下面的实例所示。
例子:
<pre name="code" class="cpp">#include<iostream>using namespace std;class xc{private:double length;double width;public:static int count;//构造函数xc(double len,double wid){cout<<"value"<<endl;length=len;width=wid;//每次创建对象时+1count++;}double area(){return length*width;}};//初始化类的静态成员int xc::count=0;int main(){xc sw(2.5,3.5);cout<<"area="<<sw.area()<<endl;cout<<"total objects:"<<xc::count<<endl;return 0;}
运行结果:
valuearea=7.5total object:1
静态函数成员
如果把函数成员声明为静态的,就可以把函数与类的任何特定对象独立开来。静态成员函数即使在类对象不存在的情况下也能被调用,静态函数只要使用类名加范围解析运算符:: 就可以访问。
静态成员函数只能访问静态数据成员,不能访问其他静态成员函数和类外部的其他函数。
静态成员函数有一个类范围,他们不能访问类的 this 指针。您可以使用静态成员函数来判断类的某些对象是否已被创建。
例子:
#include<iostream>using namespace std;class xc{private:double length;double width;public:static int count;//构造函数xc(double len,double wid){cout<<"value"<<endl;length=len;width=wid;//每次创建对象时+1count++;}double area(){return length*width;}//获取count数值static int getcon(){return count;}};//初始化类的静态成员int xc::count=0;int main(){//创建对象之前输出cout<<"before:"<<xc::getcon()<<endl;xc sw(2.5,3.5);//创建对象之后输出cout<<"final:"<<xc::getcon()<<endl;return 0;}
输出:
before:0valuefinal:1
总结:
出现在类体外的函数定义不能指定关键字static;静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;非静态成员函数可以任意地访问静态成员函数和静态数据成员;静态成员函数不能访问非静态成员函数和非静态数据成员;由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长;调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指针调用静态成员函数;当同一类的所有对象使用一个量时,对于这个共用的量,可以用静态数据成员变量,这个变量对于同一类的所有的对象都取相同的值。静态成员变量只能被静态成员函数调用。静态成员函数也是由同一类中的所有对象共用。只能调用静态成员变量和静态成员函数。类的静态成员在内存只存在一个, 而不管类创建了多少个实例。 所有成员函数都可以访问静态成员。 静态成员在类的第一个对象创建之前就已经存在了, public静态成员可以直接通过类名访问。静态成员变量就相当于一个加了名字空间的全局变量。
0 0
- C++_静态成员
- C++_静态成员
- C++_静态成员
- C++【静态成员】
- [C++] 静态成员函数
- C++-静态成员
- C++---静态成员
- c++--静态成员变量
- C++:静态成员与常成员
- C#—静态成员和实例成员
- C++static静态数据成员
- C++static静态成员函数
- C++---类中的静态成员
- 【C++】静态成员函数小结
- C++:静态类成员函数
- 【C++】类的静态成员
- C++——静态成员
- C/C++静态成员变量和静态成员函数
- 签名时出错: 未在路径 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\signtool.exe 找到 SignTool.exe
- Fragment的setUserVisibleHint详解
- 设计模式二三事——桥接模式
- android.textiview.settextcolor失效的问题
- 采用calyer画多边形
- C++静态成员
- 【SSH网上商城项目实战01】整合Struts2、Hibernate4.3和Spring4.2
- 笔记三:const 在变量、函数、指针中的使用
- Android Context简单总结
- Java虚拟机 运行时数据区
- 最小生成树Prim算法理解
- IntelliSense: 应输入声明的解决方案
- 我的Android进阶之旅------>解决Jackson等第三方转换Json的开发包在开启混淆后转换的实体类数据都是null的bug
- map映照容器