static

来源:互联网 发布:淘宝网孕婴用品 编辑:程序博客网 时间:2024/05/18 02:42
::首页 >> 文档中心 >> 在线杂志 >> C++、MFC [ 在线杂志 第50期 ]   [ 原创文档 本文适合初级读者 已阅读37326次 ] 文档 代码 工具 C++的static关键字作者:韩耀旭  C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。一、面向过程设计中的static1、静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下: //Example 1#include void fn();static int n; //定义静态全局变量void main(){n=20;cout<void fn();static int n; //定义静态全局变量void main(){n=20;cout<extern int n;void fn(){n++;cout<void fn();void main(){fn();fn();fn();}void fn(){static n=10;cout<static void fn();//声明静态函数void main(){fn();}void fn()//定义静态函数{int n=10;cout<class Myclass{public:Myclass(int a,int b,int c);void GetSum();private:int a,b,c;static int Sum;//声明静态数据成员};int Myclass::Sum=0;//定义并初始化静态数据成员Myclass::Myclass(int a,int b,int c){this->a=a;this->b=b;this->c=c;Sum+=a+b+c;}void Myclass::GetSum(){cout<<"Sum="<fn()。但是与普通函数相比,静态成员函数由于不是与任何的对象相联系,因此它不具有this指针。从这个意义上讲,它无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,它只能调用其余的静态成员函数。下面举个静态成员函数的例子。 //Example 6#include class Myclass{public:Myclass(int a,int b,int c);static void GetSum();/声明静态成员函数private:int a,b,c;static int Sum;//声明静态数据成员};int Myclass::Sum=0;//定义并初始化静态数据成员Myclass::Myclass(int a,int b,int c){this->a=a;this->b=b;this->c=c;Sum+=a+b+c; //非静态成员函数可以访问静态数据成员}void Myclass::GetSum() //静态成员函数的实现{//cout<)为一个类的对象或指向类对象的指针调用静态成员函数,也可以直接使用如下格式:<类名>::<静态成员函数名>(<参数表>)调用类的静态成员函数。 最新评论 [发表评论] [文章投稿] 查看所有评论 推荐给好友 打印 内存分配图是错的。 ( huxiao2005 发表于 2008-7-23 16:24:00) 解答关于277796230与daoxiangcun的问题:两个问题,看起来好像都与“静态全局变量/函数不能被其它文件所用”相悖。其实不然,因为二者都是在头文件中的缘故。在另一个实现文件(cpp)中extern一下变量/函数的话,便会编译错误。作者文中说的是对的。不过经过这么一折腾,更加深了对这句话的理解 ( birdsinging 发表于 2008-1-24 17:40:00) “由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长” 这句话中:1.类的全局函数 是什么意思?应该是 全局函数吧2.如果是全局函数,那么它也没有this指针,何来速度比较呢? ( birdsinging 发表于 2008-1-24 15:52:00) 这篇文章分析的很透彻啊!! ( clxye 发表于 2007-8-23 9:06:00) IT资源网:http://www.src119.com编程,IT资源网是国内最全的IT资源平台,学习软件,学习硬件的好去处,涵盖各领域,各语言热门技术-java技术,jsp,jdbc,j2ee,struts,spring,hibernate,java基础,.net学习,.net基础,php,asp,网站开发,安全技术,网页制作,图形处理,网络技术,热门软件学习,服务器技术,存储技术 ( passmatlab 发表于 2007-8-12 12:38:00) 实况狐狸老兄看的的确挺认真的,可能否在找出他人不足的时候给点补充,也好让我这样的新手看个明白,我把我的理解贴出来,希望老手指正:局部变量:是从变量的作用域的角度来称谓的,可分为局部变量和全局变量。自动变量:是从变量的存储类别的角度来称谓的,分为自动的(auto),静态的(static),寄存器的(register),外部的(extern)。 ( zwlstone 发表于 2007-1-27 23:42:00) 我把你的程序调试了一下发现和你说的不一样也就是说#include "static.h"不加可以运行,可以得到正确结果.而说没这个头文件 "static.h" ( _东东_ 发表于 2006-12-21 19:53:00) 我用vc6.0将上面的静态全局变量调试了一下//main.cpp File//when not include the head file "static.h"#include#include "static.h" //将头文件加进去extern int n;int main(void){n=20;cout<<"n="<using namespace std;static int n; //定义静态全局变量static void fn(){static int i=10;i = 888;n++;cout<#include "static.h"using namespace std;extern int n;static void fn();void f(){static int t = 909;cout<<"t = "<
  • static
  • static
  • static{}
  • static
  • static
  • Static
  • static
  • static
  • Static
  • static
  • static
  • static
  • static
  • static
  • static
  • static
  • static
  • static
  • 在Struts2中集成Spring详细讲解
  • 文件操作
  • 用CEGUI绘制环形进度条和雷达扫描(技能CD)效果
  • 在Struts2中整合Spring的IoC
  • 让电信,网通用户都能够访问你的网站
  • static
  • jquery轮播图小结
  • J2ME中Canvas双缓冲方法(同为屏幕内容转换Image对象方法)
  • /dev/fb0的入门练习
  • J2SE学习笔记2 — Java开发环境
  • meego上的音乐播放器服务程序
  • 使用和通过DWR实现AJAX校验动态树
  • Solaris Sparcv9下jdk64位的安装
  • 用SPGridView显示SharePoint内容
  • 原创粉丝点击