• 关于static 与 const


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

  • 相关阅读:
    unexpected inconsistency;run fsck manually esxi断电后虚拟机启动故障
    centos 安装mysql 5.7
    centos 7 卸载mysql
    centos7 在线安装mysql5.6,客户端远程连接mysql
    ubuntu 14.04配置ip和dns
    centos7 上搭建mqtt服务
    windows eclipse IDE打开当前类所在文件路径
    git 在非空文件夹clone新项目
    eclipse中java build path下 allow output folders for source folders 无法勾选,该如何解决 eclipse中java build path下 allow output folders for source folders 无法勾选,
    Eclipse Kepler中配置JadClipse
  • 原文地址:https://www.cnblogs.com/kingDr/p/3422083.html
Copyright © 2020-2023  润新知