zoukankan      html  css  js  c++  java
  • 关于static 与 const

    static声明的变量或函数仅在本文件有效。强调的是存储的位置:全局区(静态区),当static修饰成员函数时,该函数只能访问静态数据成员;其修饰的函数或变量在其作用域外并不释放,而是在程序结束才释放。另外,普通对象除了调用普通成员函数外还可以调用静态成员函数。
    const声明的变量或函数意为“只读”,强调的是常量不变。当const修饰成员函数时,该函数除了可以访问const类型的数据变量外,也可访问普通成员变量;其修饰对象时,该对象只能调用const成员函数,不能调用其它非const成员函数。
    另外,成员函数是一份,即不同对象的成员函数是同一函数代码段;而,数据成员(非静态)则是随对象的个数而拷贝的,多份。。。
    静态数据成员在内存中只占一份空间,每个对象都可以引用这个静态数据成员。静态数据成员的值对所有对象都是一样的。如果改变它的值,则在各对象中这个数据成员的值都同时改变了。这样可以节约空间,提高效率。
    说明:
    1.如果只声明了类而未定义对象,则类的一般数据成员是不占内存空间的,只有在定义对象时,才为对象的数据成员分配空间。但是静态数据成员不属于某一个对象,在为对象所分配的空间中不包括静态数据成员所占的空间。静态数据成员是在所有对象之外单独开辟空间。只要类中定义了静态数据成员,即使不定义对象,也为静态数据成员分配空间,它可以被引用。
    2.如果在一个函数中定义了静态变量,在函数结束时该静态变量并不释放,仍然存在并保留其值。静态数据成员也是如此,它不随对象的建立而分配空间,也不随对象的撤销而释放。静态数据成员是在程序编译时被分配空间的,到程序结束时才释放空间。
    3.静态数据成员可以初始化,但只能在类体外进行初始化。声明时候加static,初始化时不要加static。注意:不能用参数初始化表对静态数据成员初始化。如果未对静态数据成员赋初值,则编译系统会自动赋予初值0.
    4.静态数据成员既可以通过对象名引用,也可以通过类名来引用。如果静态数据成员被定义为私有的,则不能在类外直接引用,而必须通过公用的成员函数引用。
    5.有了静态数据成员,各对象之间的数据有了沟通的渠道,实现数据共享,因此可以不使用全局变量。全局变量破坏了封装的原则,不符合面向对象的要求。------------引自《C++程序设计》

  • 相关阅读:
    EasyUI左边树菜单和datagrid分页
    Linux上安装Redis教程
    TreeMap和TreeSet的区别与联系
    将Map<String, List<Map<String,Object>>>进行排序
    Linux系统安装JDK和Tomcat
    点击添加按钮,使用ajax动态添加一行和移除一行,并且序号重新排序和数据不重复操作判断
    23种设计模式汇总整理
    SSH架构BaseDao实现
    双击Table表格td变成text修改内容
    用户找回密码功能JS验证邮箱通过点击下一步隐藏邮箱输入框并修改下一步按钮的ID
  • 原文地址:https://www.cnblogs.com/kingDr/p/3422083.html
Copyright © 2011-2022 走看看