`
ihuashao
  • 浏览: 4545096 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

static 关键字用途

阅读更多

copy from http://www.cnitblog.com/ictfly/archive/2006/11/25/19594.html

本文只是本人对C++中关于静态类型的一个总结,如错误之处,请大家帮我改正。我分两个方面来总结,第一方面主要是相对于面向过程而言,即在这方面不涉及 到类,第二方面相对于面向对象而言,主要说明static在类中的作用。

一、在面向过程设计中的static关键字

1、 静态全局变量

定义:在全局变量前,加上关键字 static 该变量就被定义成为了一个静态全局变量。

特点:
   A、该变量在全局数据区分配内存。
  B、初始化:如果不显式初始化,那么将被隐式初始化为0。
  C、访变量只在本源文件可见, 严格的讲应该为定义之处开始到本文件结束。

  例(摘于C++程序设计教程---钱能主编P103):         //file1.cpp
        #include<iostream.h>
         void fn();
        extern int n;
        void main()
         {
          n=20;
          cout << n << endl;
           fn();
        }

        //file2.cpp
         #include<iostream.h>

        static int n; //定义静态全局变量,初始化为0;
        void fn()
        {
          n++;
          cout << n << endl;
        }

  文件 分别编译能通过,但连接时file1.cpp 中的变量n找不到定义,产生连接错误。

  D、文件作用域下声明的const的常量默认 为static存储类型。

2、静态局部变量

定义:在局部变量前加上static关键字时,就定义了静态局部变量。

特 点:
  A、该变量在全局数据区分配内存。
  B、初始化:如果不显式初始化,那么将被隐式初始化为0。
  C、它始终驻 留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或 语句块结束时,其作用域随之结束。

3、静态函数(注意 与类的静态成员函数区别)

定义:在函数的返回类型前加上static关键字,函数即被定义成静态函数。

特点:
   A、静态函数只能在本源文件中使用(这是与普通函数区别)
  例(摘于C++程序设计教程---钱能主编P103):         //file1.cpp
        void fn();
        void staticFn()

         void main()
        {

          fn();
           staticFn();
        }

        //file2.cpp
         #include<iostream.h>

        static void staticFn();
         void fn();

        void fn()
        {
           staticFn();
          cout << "this is fn() \n";
        }

        void staticFn()
        {
          cout << "this is staticFn() \n";
        }
连接时,将产生找不到函数 staticFn()定义的错误。

  B、主意事项

  在文件作用域下声明的inline函数默认为static类 型。

二、面象对象中的static关键字(主要指类中的static关键字)

1、静态数据成员

特 点:
  A、内存分配:在程序的全局数据区分配。
  B、初始化和定义:
   a、静态数据成员定义时要分配空间,所以不 能在类声明中定义。
   b、为了避免在多个使用该类的源文件中,对其重复定义,所在,不能在类的头文件中
    定义。
    c、静态数据成员因为程序一开始运行就必需存在,所以其初始化的最佳位置在类的内部实现。
  C、特点
   a、对相于 public,protected,private 关键字的影响它和普通数据成员一样,
   b、因为其空间在全局数据区分配,属于所有本类 的对象共享,所以,它不属于特定的类对象,在没产生类对象时其作用域就可见,即在没有产生类的实例时,我们就可以操作它。

  D、访问 形式
   a、 类对象名.静态数据成员名
   b、 类类型名:: 静态数据成员名

  E、静态数据成员,主要 用在类的所有实例都拥有的属性上。比如,对于一个存款类,帐号相对   于每个实例都是不同的,但每个实例的利息是相同的。所以,应该把利息设为存款类的 静态数据成员。这有两个好处,第一,不管定义多少个存款类对象,利息数据成员都共享分配在全局区的内存,所以节省存贮空间。第二,一旦利息需要改变时,只 要改变一次,则所有存款类对象的利息全改变过来了,因为它们实际上是共用一个东西。

2、静态成员函数

特点:
   A、静态成员函数与类相联系,不与类的对象相联系。
  B、静态成员函数不能访问非静态数据成员。原因很简单,非静态数据成员属于特定的类实 例。

作用:
  主要用于对静态数据成员的操作。
调用形式:
  A、类对象名.静态成员函数名()
   B、类类型名:: 静态成员函数名()

分享到:
评论

相关推荐

    static关键字,接口和多态

    1. static关键字 1.1 static修饰静态成员方法用途 特征: 1. 摆脱类对象,效率高,节约内存空间,提高开发效率 2. 类内成员变量和成员方法都不可以使用,但是不影响使用外来数据。 3. 静态成员方法通常用于工具类...

    互联网公司面试必考题目集锦

    个人整理 原创 收集很多经典面试题 每年笔试面试必考题目 如 itoa实现 KMP算法实现 快排序 冒泡 static关键字用途 string类实现 数据库事物 游标 等等。。。吐血整理一个月 这是第一本 第二本邮箱索取

    详解C++中static的用法

    C 语言的 static 关键字有三种(具体来说是两种)用途: 1. 静态局部变量:用于函数体内部修饰变量,这种变量的生存期长于该函数。 int foo(){ static int i = 1; // note:1 //int i = 1; // note:2 i += 1; ...

    C# 基础入门–关键字

    1.关键字 class ,这个关键字的用途是声明类,是C#程序最小单元,比如上面例子中,类名叫做Program。 2.关键字 namespace ,这个关键字的用途是声明“命名空间”。比如上面例子中,命名空间叫做MyA

    C_gjz.rar_float

    关键字就是被C语言本身使用的,不能作其它用途使用的字。关键字不能用作变量名,函数名。 C语言中的关键字 auto :声明自动变量 一般不使用 double :声明双精度变量或函数 float:声明浮点型变量或函数 int: 声明...

    C语言中auto,register,static,const,volatile的区别详细解析

    (3)static常见的两种用途:1&gt;统计函数被调用的次数;2&gt;减少局部数组建立和赋值的开销.变量的建立和赋值是需要一定的处理器开销的,特别是数组等含有较多元素的存储类型。在一些含有较多的变量并且被经常调用的函数中,...

    C语言面试题-求职必备收藏备用.docx

    - `static` 关键字在C语言中有哪些用途? 2. **指针和数组** - 指针和数组有什么区别? - 数组名在表达式中退化为指针,请举例说明。 - 空指针和未初始化的指针有什么区别? - 野指针是什么?如何避免? - ...

    java基础语法 汇总

    很多语法记不住,汇总一下,抄...2. 关键字:在Java程序中有特殊用途的英文单词。全小写。今天学的有: public 公有的 class 类 static 静态的 void 空的,没有的 byte,short,int,long,float,double,char,boolean

    编程思想下篇

    2.6.3 static 关键字 2.7 你的第一个Java程序 编译和运行 2.8 注释和嵌入式文档 2.8.1 注释文档 2.8.2 语法 2.8.3 嵌入式HTML 2.8.4 一些标签示例 2.8.5 文档示例 2.9 编码风格 2.10 总结 2.11 练习 第3章 操作符 ...

    @SuppressWarnings

    )下面是一个清单: 关键字 用途 deprecation 使用了不赞成使用的类或方法时的警告 unchecked 执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型。 fallthrough 当 Switch ...

    Thinking in java4(中文高清版)-java的'圣经'

    5.3 缺省构造器 5.4 this关键字 5.4.1 在构造器中调用构造器 5.4.2 static的含义 5.5 清理:终结处理和垃圾回收 5.5.1 finalize()的用途何在 5.5.2 你必须实施清理 5.5.3 终结条件 5.5.4 垃圾回收器如何工作 5.6 ...

    Thinking in java(中文)

    类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用其他组件 2.6.3 static关键字 2.7 我们的第一个Java程序 2.8 注释和...

    你必须知道的495个C语言问题

    6 1.12 关键字auto到底有什么用途? 7 类型定义(typedef) 7 1.13 对于用户定义类型,typedef和#define有什么区别? 7 1.14 我似乎不能成功定义一个链表。我试过typedef struct {char *item; NODEPTR next;}* ...

    《你必须知道的495个C语言问题》

    6 1.12 关键字auto到底有什么用途? 7 类型定义(typedef) 7 1.13 对于用户定义类型,typedef和#define有什么区别? 7 1.14 我似乎不能成功定义一个链表。我试过typedef struct {char *item; NODEPTR next;}* ...

    JAVA基础课程讲义

    static 关键字 66 静态初始化块(经常用来初始化类,加载类信息时执行!) 67 package 68 JDK中的主要包 68 import 68 eclipse的使用 69 继承(extend, inheritance) 70 为什么需要继承?继承的作用? 70 继承介绍 70...

    一些C面试题,希望能对大家有帮助

    4. static有什么用途?(请至少说明两种) 1.限制变量的作用域 2.设置变量的存储域 7. 引用与指针有什么区别? 1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 2) 不存在...

    超爽的自学课件(java)

    static关键字;注释和嵌入文档等等。 &lt;br&gt;(3) 第3章:控制程序流程 本章开始介绍起源于C和C++,由Java继承的所有运算符。除此以外,还要学习运算符一些不易使人注意的问题,以及涉及造型、升迁以及优先次序的...

    Thinking in Java 中文第四版+习题答案

    2.6.3 static关键字 2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9...

Global site tag (gtag.js) - Google Analytics