当前位置: 首页 > news >正文

学习【菜鸟教程】【C++ 类 对象】【C++ 类的静态成员】

链接

1. 教程

可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。
在这里插入图片描述
静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态成员的初始化放置在类的定义中,但是可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化,如下面的实例所示。

下面的实例有助于更好地理解静态成员数据的概念:

#include <iostream>using namespace std;class Box
{public:static int objectCount;// 构造函数定义Box(double l=2.0, double b=2.0, double h=2.0){cout <<"Constructor called." << endl;length = l;breadth = b;height = h;// 每次创建对象时增加 1objectCount++;}double Volume(){return length * breadth * height;}private:double length;     // 长度double breadth;    // 宽度double height;     // 高度
};// 初始化类 Box 的静态成员
int Box::objectCount = 0;int main(void)
{Box Box1(3.3, 1.2, 1.5);    // 声明 box1Box Box2(8.5, 6.0, 2.0);    // 声明 box2// 输出对象的总数cout << "Total objects: " << Box::objectCount << endl;return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

Constructor called.
Constructor called.
Total objects: 2

如果把函数成员声明为静态的,就可以把函数与类的任何特定对象独立开来。静态成员函数即使在类对象不存在的情况下也能被调用,静态函数只要使用类名加范围解析运算符 :: 就可以访问。

静态成员函数只能访问静态成员数据、其他静态成员函数和类外部的其他函数。

静态成员函数有一个类范围,他们不能访问类的 this 指针。您可以使用静态成员函数来判断类的某些对象是否已被创建。

静态成员函数与普通成员函数的区别:

  • 静态成员函数没有 this 指针,只能访问静态成员(包括静态成员变量和静态成员函数)。
  • 普通成员函数有 this 指针,可以访问类中的任意成员;而静态成员函数没有 this 指针。

下面的实例有助于更好地理解静态成员函数的概念:

#include <iostream>using namespace std;class Box
{public:static int objectCount;// 构造函数定义Box(double l=2.0, double b=2.0, double h=2.0){cout <<"Constructor called." << endl;length = l;breadth = b;height = h;// 每次创建对象时增加 1objectCount++;}double Volume(){return length * breadth * height;}static int getCount(){return objectCount;}private:double length;     // 长度double breadth;    // 宽度double height;     // 高度
};// 初始化类 Box 的静态成员
int Box::objectCount = 0;int main(void)
{// 在创建对象之前输出对象的总数cout << "Inital Stage Count: " << Box::getCount() << endl;Box Box1(3.3, 1.2, 1.5);    // 声明 box1Box Box2(8.5, 6.0, 2.0);    // 声明 box2// 在创建对象之后输出对象的总数cout << "Final Stage Count: " << Box::getCount() << endl;return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

Inital Stage Count: 0
Constructor called.
Constructor called.
Final Stage Count: 2

2. 精选评论

2.1 评论一

可以使用静态成员变量清楚了解构造与析构函数的调用情况。

#include <iostream>
using namespace std;class Cpoint{public:static int value;static int num;Cpoint(int x,int y){xp=x;yp=y;value++;cout << "调用构造:" << value << endl;}~Cpoint(){num++; cout << "调用析构:" << num << endl;}private:int xp,yp;
};int Cpoint::value=0;
int Cpoint::num=0;
class CRect{public:CRect(int x1,int x2):mpt1(x1,x2),mpt2(x1,x2) {cout << "调用构造\n";}~CRect(){cout << "调用析构\n";}private:Cpoint mpt1,mpt2;
};int main()
{CRect p(10,20);cout << "Hello, world!" << endl;return 0;
}

运行结果:

调用构造:1
调用构造:2
调用构造
Hello, world!
调用析构
调用析构:1
调用析构:2

2.2 评论二

对类中静态变量的初始化始终令人迷惑不解。在这总结分享一下。

类中特殊成员变量的初始化问题:

  • 常量变量:必须通过构造函数参数列表进行初始化。
  • 引用变量:必须通过构造函数参数列表进行初始化。
  • 普通静态变量:要在类外通过"::"初始化。
  • 静态整型常量:可以直接在定义的时候初始化。
  • 静态非整型常量:不能直接在定义的时候初始化。要在类外通过"::"初始化。

相关文章:

学习【菜鸟教程】【C++ 类 对象】【C++ 类的静态成员】

链接 1. 教程 可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时&#xff0c;这意味着无论创建多少个类的对象&#xff0c;静态成员都只有一个副本。 静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句&#xff0c;在创建第一个对象时…...

计算机四大件笔记

啊~数据库、操作系统、计算机网络、Linux start 操作系统 并发和并行 并发是同一时间段内发生了多个事情&#xff0c;多任务之间互相抢占资源。 并行是在同一时间点内发生了多个事情&#xff0c;多任务之间不互相抢占资源&#xff0c;只有多CPU的情况下才能并行。 例如&a…...

【vue上传文件——hash】

vue上传文件 要求:只能上传视频,先计算文件的hash值,hash值一样则不需要上传,不一样在执行上传 分析:因为el-upload没有找到合适的属性,本次用的是原生的input的type属性为file上传 代码: html: 通过点击选取文件按钮调用input上传 js 第一步:点击上传文件先效验是否…...

【OpenCV DNN】Flask 视频监控目标检测教程 01

欢迎关注『OpenCV DNN Youcans』系列&#xff0c;持续更新中 【OpenCV DNN】Flask 视频监控目标检测教程 01 【OpenCV DNN】Flask 视频监控目标检测教程 01 1. 面向Python程序的Web框架2. Flask 框架的安装与使用2.1 Flask 安装2.2 Flask 框架例程2.3 绑定IP和端口2.4 Flask路…...

(转载)从0开始学matlab(第10天)—自顶向下的编程思想

在前面的内容中&#xff0c;我们开发了几个完全运转的 MATLAB 程序。但是这些程序都十分简单&#xff0c;包括一系列的 MATLAB 语句&#xff0c;这些语句按照固定的顺序一个接一个的执行。像这样的程序我们称之顺序结构程序。它首先读取输入&#xff0c;然后运算得到所需结果&a…...

mapreduce技术

要实现操作hbase数据表首先要了解它的原理&#xff1a; 1,Hbase原理篇 HBASE就是基于Hadoop的一个开源项目&#xff0c;也是对Google的BigTable的一种实现。 BigTable最浅显来看就是一张很大的表&#xff0c;表的属性可以根据需求去动态增加&#xff0c;但是又没有表与表之间…...

AI智慧安监视频平台EasyCVR视频出现不能播放的情况排查与解决

EasyCVR基于云边端协同&#xff0c;可支持海量视频的轻量化接入与汇聚管理。平台兼容性强、拓展度高&#xff0c;可提供视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、H.265自动转码、平台级联等功能。 有用户反…...

嵌入式学习之Linux驱动(第九期_设备模型_教程更新了)_基于RK3568

驱动视频全新升级&#xff0c;并持续更新~更全&#xff0c;思路更科学&#xff0c;入门更简单。 迅为基于iTOP-RK3568开发板进行讲解&#xff0c;本次更新内容为第九期&#xff0c;主要讲解设备模型&#xff0c;共计29讲。视频选集 0.课程规划 06:35 1.抛砖引玉-设备模型…...

LeetCode662.设计循环队列||4种方法实现

目录 题目 思路1(链表) 代码 思路2(数组) 代码 题目 题目要求的队列需要实现的功能有 ①Creat---设置队列长度 ②Front---获取队列头 ③Rear---获取队列尾 ④en----插入元素 ⑤de---删除元素 ⑥empty---判空 ⑦full---判满 思路1(链表) &#x1f50d;普通队列长度没有限制&…...

人工智能专栏第十二讲——依存解析

依存句法分析是一种自然语言处理技术&#xff0c;其目的是识别句子中单词之间的依赖关系。在自然语言处理中&#xff0c;依存句法分析是一项非常重要的任务&#xff0c;因为它可以帮助我们理解句子的语义结构&#xff0c;从而更好地进行文本分析、信息抽取、语音识别等任务。 …...

nest日志包pino、winston配置-懒人的折腾

nest日志 三种node服务端日志选型 winstonpinolog4js 2023年5月23日 看star数&#xff1a;winston > pino > log4js 使用体验&#xff1a; pino 格式简洁&#xff0c;速度快&#xff0c;支持输入日志到任意数据库&#xff0c;日志暂无自动清理&#xff08;可能是我…...

一文看懂增值税发票识别OCR:从技术原理到 API Java 示例代码接入

引言 增值税发票识别OCR API是一项重要的技术创新&#xff0c;它在如今信息化的商业环境中发挥着重要作用。通过利用该API&#xff0c;企业和机构能够实现增值税发票的自动化识别和信息提取&#xff0c;从而在财务管理、票据核对、报销流程等方面带来许多好处。 本文将详细介…...

消息队列对比

目录 什么是消息队列 常用的消息队列工具对比 1 、ActiveMQ 2 、RabbitMQ 3、Kafka 4、 RocketMQ 什么是消息队列 消息队列是分布式应用间交换信息的重要组件&#xff0c;消息队列可驻留在内存或磁盘上, 队列可以存储消息直到它们被应用程序读走。通过消息队列&#xff0…...

Ceph对象存储的基本概念,使用以及优点

Ceph对象存储的基本概念&#xff0c;使用以及优点 Ceph是一种基于分布式架构的对象存储系统&#xff0c;它可以提供高可靠性、高扩展性和高性能的存储服务。这种存储系统可以用于处理大量的数据&#xff0c;例如大型数据库、云存储、视频流、图像数据等。Ceph对象存储系统的基…...

工业互联网UWB定位系统源码,支持自定义开发

工厂人员定位系统&#xff0c;采用UWB定位技术&#xff0c;通过在厂区内部署一定数量的定位基站&#xff0c;以及为人员、车辆、物资佩戴标签卡的形式&#xff0c;实时获取人员精确位置&#xff0c;精度高达10cm。 文末获取联系 工厂人员定位系统可实现物资/车辆实时定位&#…...

VIC模型教程

详情点击链接&#xff1a;RVIC模型融合实践技术应用及未来气候变化模型预测 一&#xff1a;VIC模型的原理与特点 1.VIC模型各模块的主要原理 2.VIC模型的特点及优势 3.VIC模型的适用范围及其限制 4.VIC模型主要输入和输出文件解析案例一 &#xff1a;基于QGIS的VIC模型建模…...

软件著作权容易搞吗?

没有代码、材料&#xff0c;只有一个软件名字就能拿证&#xff0c;你说容易不… 当然这是对我们软著一级代理来说&#xff0c;每年申请下证几千个软著。下面说说下证要点给大家避坑。人群覆盖高新企业、大学生、大学老师、互联网公司。 软件著作权想要轻松下证&#xff0c;必…...

Mac打出特殊字符

optionq&#xff1a;œ ---------optionw&#xff1a;∑ optione&#xff1a; ---------optionr&#xff1a; optiont&#xff1a;† ---------optiony&#xff1a; optionu&#xff1a; ---------optionI&#xff1a;无 optiono&#xff1a; ---------optionP&#xff1a;π o…...

java设计模式之单例设计模式的前世今生

单例设计模式是什么&#xff1f; 单例设计模式是一种创建型模式&#xff0c;它保证一个类只有一个实例&#xff0c;并且该实例提供了全局访问点。这意味着即使在不同的地方&#xff0c;访问这个单例实例的代码得到的都是同一个对象。 单例模式的特点如下&#xff1a; - 保证…...

小航助学2023年3月GESP_C++一级试卷(含题库答题软件账号)

GESP在线模拟训练系统请点击 电子学会-全国青少年编程等级考试真题Scratch一级&#xff08;2019年3月&#xff09;在线答题_程序猿下山的博客-CSDN博客_小航答题助手 答案:B 第1题以下不属于计算机输入设备的有&#xff08; &#xff09;。 A、键盘B、音箱C、鼠标D、传感器 …...

深度解析Atmosphere系统:为Nintendo Switch带来的完整自定义固件解决方案

深度解析Atmosphere系统&#xff1a;为Nintendo Switch带来的完整自定义固件解决方案 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 你是否曾为Switch游戏价格高昂而烦恼&#xff1f;是否…...

3个理由告诉你为什么选择哔哩下载姬:B站视频下载的终极解决方案

3个理由告诉你为什么选择哔哩下载姬&#xff1a;B站视频下载的终极解决方案 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印…...

使用taotoken cli工具,一键为团队开发环境配置多模型api密钥

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用taotoken cli工具&#xff0c;一键为团队开发环境配置多模型api密钥 在团队协作开发中&#xff0c;统一管理多个大模型API的密…...

LED闪灯电路板学习 过程

原理图和pcb是开源的&#xff0c;照着抄就行了,难点主要在于焊接,,焊接我分为三步,第一步一定要点锡&#xff0c;呈现45度角,大约3秒到5秒,第二步就是要夹稳零件往一边靠,第三步就是要顺水的焊锡焊另外一边,最重要就是第二步,熬过去就简单了,打了5个板子花了三天时间从零成功,重…...

智慧树自动刷课插件:3步安装指南,彻底解放学习时间

智慧树自动刷课插件&#xff1a;3步安装指南&#xff0c;彻底解放学习时间 【免费下载链接】zhihuishu 智慧树刷课插件&#xff0c;自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台重复性的视频学习任务而烦恼…...

3分钟解锁Unity全版本:UniHacker跨平台破解神器完全指南

3分钟解锁Unity全版本&#xff1a;UniHacker跨平台破解神器完全指南 【免费下载链接】UniHacker 为Windows、MacOS、Linux和Docker修补所有版本的Unity3D和UnityHub 项目地址: https://gitcode.com/GitHub_Trending/un/UniHacker 你是否还在为Unity高昂的许可证费用而烦…...

YooAsset资源治理:Unity热更新与AB包依赖管理实战

1. 为什么Unity老手一提资源管理就皱眉&#xff1a;从AssetBundle的“三座大山”说起在Unity项目做到中后期&#xff0c;几乎每个主程都会经历这么一个深夜&#xff1a;打包时间突然从3分钟涨到12分钟&#xff1b;热更包体积比预期大出40%&#xff0c;CDN带宽告急&#xff1b;策…...

12周学习笔记

...

用Python解放你的记忆:Genanki自动化Anki卡片生成终极指南

用Python解放你的记忆&#xff1a;Genanki自动化Anki卡片生成终极指南 【免费下载链接】genanki A Python 3 library for generating Anki decks 项目地址: https://gitcode.com/gh_mirrors/ge/genanki 你是否曾为手动创建数百张Anki卡片而头痛&#xff1f;是否想过将学…...

Python基础篇:闭包、装饰器wrapper

一、闭包 元组字典解包 def func(*args, **kwargs):print(type(args)) # <class tuple>print...