静态数据成员

多个同类的对象之间实现数据共享,但是不用全局变量,可以用静态数据结构成员。因为全局变量的值可以在各处随意的修改,很可能因为一处失误,导致整个程序失败。

#include <iostream>
using namespace std;class Box
{public:Box(int, int);int volume();static int height;            //height is defined as static data int width;int length;
};Box::Box(int, int)
{width = w;length = len;
}int Box::volume()
{return(height * width * length);
}int Box::height = 10;                 //initialize static member data int main()
{Box a(15,20),b(20,30);cout << a.height << endl;        //use object a cout << b.height << endl;        //use object bcout << Box::height << endl;     //use class Boxcout << a.volume() << endl;      //function volume
}

输出结果:

10
10
10
3000
Program ended with exit code: 0

分析一下:

a. 静态数据成员可以初始化,但只能在类体外初始化。格式:

数据类型 类名::静态数据成员名 = 初值;

不必在初始化语句中加static。

注意:不能用参数初始化表对静态数据成员初始化。例如:

Box(int h, int w, int len):height(h){}    //error,height is static data

b. a.height/b.height/Box::height,输出都是10,说明静态数据成员为所有同类对象所共有,不只是属于某一个对象。因为静态数据对象在内存中只占用一份空间,如果改变了它,那么各个对象的数据成员的值都改变了,可以节约空间和效率。它不随着对象的建立而分配空间,也不随着对象的撤销而释放。静态数据成员是在程序编译时被分配空间的,到程序结束时才释放。

c. 有了静态数据对象,对象之间的数据有了沟通的渠道,实现数据共享,因此可以不使用全局变量。静态数据成员的作用域是该类,而不是全局。

C++ --- 静态数据成员相关推荐

  1. c++对象长度之静态数据成员(3)

    当类中定义了静态数据成员.当类中定义了静态数据成员时,由于静态数据成员与静态变量原理相同(是一个含有作用域的特殊全局变量),因此该静态数据成员的初值会被写入编译链接后的执行文件中.当程序被加载时,操作 ...

  2. C++静态数据成员和静态成员函数

    在C++面向对象编程过程当中,对象与对象之间的数据不是共享,在设计类的时候,有时候需要一些对象之间共享的数据,除了把所要共享的数据设置为全局数据或者函数之外,还可以利用C++的静态机制. 1.静态数据 ...

  3. Qt使用导出类报错:error C2491: “ZMapWidget::staticMetaObject”: 不允许 dllimport 静态数据成员 的定义

    在使用一个继承自QObject带有Q_OBJECT宏的导出类时,编译报错:不允许 dllimport 静态数据成员 的定义. 原因是自动生成的moc文件带有静态函数,无法导出. 1.在Qt中的解决办法 ...

  4. c++远征之模板篇——静态数据成员,静态成员函数

    以下内容源于慕课网的学习整理,如有侵权,请告知删除. 1.静态数据成员 (1)不同于普通的数据成员,静态数据成员在没有实例化时,它也是存在的(即它是和类共存的): (2)它一般不依赖于构造函数的初始化 ...

  5. 【C++基础学习】关于C++静态数据成员

    静态类成员包括静态数据成员和静态函数成员两部分. 一. 静态数据成员: 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员.和其他数据成员一样,静态数据成员也遵守pu ...

  6. c语言类静态数据成员函数,鸡啄米:C++编程入门系列之二十一(C++程序设计必知:类的静态成员)...

    鸡啄米在上一讲数据和函数中讲到,函数之间共享数据也就是此函数访问彼函数的数据主要是通过局部变量.全局变量.类的数据成员.类的静态成员及友元实现的,前三个已经讲过了,这一讲鸡啄米来讲讲静态成员.静态成员 ...

  7. C++静态数据成员与静态函数(案例分析)

    文章目录 一.静态数据成员 二.静态函数 一.静态数据成员 #include <iostream> using namespace std;class Box {public:Box(in ...

  8. C++类的静态数据成员-关键字static

    C++类的静态数据成员-关键字static 定义:用static关键字声明的数据成员称为静态数据成员. 每个类只有一个存储单元,静态数据成员为该类的所有对象共有,不属于某个对象.静态数据成员的初始化必 ...

  9. 静态数据成员与静态成员函数

    3-6 静态数据成员与静态成员函数 Time Limit: 1000MS Memory limit: 65536K 题目描述 通过本题目的练习可以掌握静态数据成员和静态成员函数的用法 要求设计一个点类 ...

  10. qt 不允许 dllimport 静态数据成员 的定义_C++类和对象的定义

    想用机器人赋能未来,少不了扎实的编程基本功,让我们跟着清华大学的C++语言程序课程一起过一遍C++的语法知识吧! C++语言特点--面向对象的程序设计 对象是现实中的对象在程序中的模拟,类是同一类对象 ...

最新文章

  1. Survey | 深度学习方法在生物网络中的应用
  2. Xamarin图表开发基础教程(1)
  3. catia曲面扫掠命令详解_Catia曲面基础与工程实践 3.2 扫掠曲面
  4. Allegro跨分割检查
  5. Data Collection with Apache Flume(一)
  6. 云小课|CDN第5课 CDN入门之—我的网站可以用CDN加速吗?
  7. 基础数据类型的坑和集合及深浅copy
  8. 汽车后市场的大数据引擎谁人可造
  9. 六月份大学毕业,却感觉自己什么都不会。很迷茫,怎么办?
  10. 【从嵌入式视角学习香山处理器】四、Chisel语言基础
  11. winserver2003打开ping
  12. Anker-一个研发工程师的电商梦
  13. movie起居类分类词汇
  14. 结束时间和开始时间不能大于31天
  15. java程序开启远程调试、断点功能
  16. 目标检测算法之常见评价指标的详细计算方法及代码解析
  17. 嵌入式硬件开发基础(持续更新)
  18. C语言中free函数如何确定释放的空间大小
  19. 【小程序】提交成功和失败界面示例(图文+代码)
  20. CP56time2a

热门文章

  1. 【虚拟机】VirtualBox添加虚拟磁盘
  2. linux下的swap分区
  3. FFMPEG 之 AVDevice
  4. Electron 在 mac上无法复制粘贴
  5. 牵手PeckShield,当红DeFi项目Aave爆炸式增长的背后?
  6. 使用网页代码快速写出你自己的第一个手机App
  7. MAZDA CX-50没现车怎么办?赶紧去VR看车啊!
  8. SAP系统中---命令字段
  9. 类加载子系统【JVM之内存与垃圾回收篇】
  10. paypal异步回调超时或无法请求到我们的服务器解决方案