C++笔记(六)--- 静态成员变量/函数(static)

目录

C语言中静态变量

C++静态成员变量

C++静态成员函数


C语言中静态变量

1.函数内部用static修饰的变量,只能在此函数使用,但所修饰的变量不随函数释放而释放,下次调用时的值仍为上次结束时的值
2.static修饰的全局变量只能在其定义的文件使用
3.static修饰的函数只能在其所在的文件中被调用

知识点:static修饰的静态成员变量或成员函数是在编译链接过程中就分配好了内存空间,而普通成员函数是在运行过程中分配空间(根据  分配空间的时间点  这个知识点理解下文)

C++静态成员变量

1.C++类中的成员变量放置在全局静态变量区
2.C++类中的静态成员变量可以多个类成员之间数据共享
3.C++类中的成员变量必须在对应的cpp文件中进行定义(类成员函数只是声明,可以类比C中extern声明的int变量)
4.C++类中静态成员变量不能在构建函数中以列表方式初始化
//    a.h文件class A
{
public://    A():i(10){}//错误,不能以列表方式初始化静态成员变量A(){ i = 10; }    //正确void set(int ii) { i = ii; }void print(void) { cout << "A::i = " << i << endl; }
private:static int i;
}//main.cpp文件int A::i;    //类成员变量必须在对应cpp中进行定义,且不能用static修饰。否则与C标准中static修饰变量只能在本文件使用的规则冲突,从而报错int main(void)
{A a,b;b.set(20);    //成员变量b对i进行赋值a.print();    //最后输出  A::i = 20, 静态成员变量可以多个类成员之间数据共享return 0;
}

C++静态成员函数

1.static成员函数内不能使用this指针
2.static修饰的成员函数只能处理static修饰的成员函数或变量
3.static修饰的成员函数可以在类没有实例化时调用
class A
{
public:A(){ }void print(void){ cout << "A::print()" << endl;}static void fun(void){cout << "i: " << i << endl;    //正确
//下面错误写法的原因都是 类A未实例化,在内存中未分配空间,导致找不到对应变量或函数
//        cout << "i: " << this->i << endl;    //报错,“this”: 只能在非静态成员函数或非静态数据成员初始值设定项的内部引用
//        print();    //报错,“A::printf”: 非静态成员函数的非法调用
//        cout << "k: " << k << endl;    //报错,对非静态成员“A::k”的非法引用
//原因,当main函数使用 A::fun()调用此函数时,k并未定义,所以找不到k}
private:static int i;int k;
}int main(void)
{
//    A::print();    //错误, 非static成员函数只能实例化后调用A::fun();    //正确,在编译链接时期就对static成员函数分配了空间,可以直接调用return 0;
}

static修饰类实例

1.静态类实例化时,是在编译链接时就已经分配好空间,但在使用时进行初始化
2.类实例化用static修饰时,它的析构函数在程序执行完成之后执行,而非对应的函数执行完毕
3.多个cpp文件定义static的类实例化时,类的构造函数执行是随机的
//a.h文件
class A
{
public:A() : i(0){ cout << "A() " << endl; }void print(void) { cout << "A::i = " << i << endl; }
private:int i;
};//b.cpp文件
void b_fun()
{static A bFun;
}//c.cpp文件
void c_fun()
{static A cFun;
}//main.cpp文件
int main(void)
{cout << "Main Begin!" << endl;static A a;a.print();cout << "Main end!" << endl;return 0;
}//b.cpp和c.cpp中的 bFun 和 cFun 的分配内存时间不能确定先后顺序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/714030.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据可视化原理-腾讯-热力图

在做数据分析类的产品功能设计时&#xff0c;经常用到可视化方式&#xff0c;挖掘数据价值&#xff0c;表达数据的内在规律与特征展示给客户。 可是作为一个产品经理&#xff0c;&#xff08;1&#xff09;如果不能够掌握各类可视化图形的含义&#xff0c;就不知道哪类数据该用…

CSP-201712-2-游戏

CSP-201712-2-游戏 解题思路 初始化变量&#xff1a;定义整数变量n和k&#xff0c;分别用来存储小朋友的总数和淘汰的特定数字。然后定义了num&#xff08;用来记录当前报的数&#xff09;和peopleIndex&#xff08;用来记录当前报数的小朋友的索引&#xff09;。 初始化小朋…

MATLAB环境下基于离散小波变换的体外血管图像处理

下面简要介绍小波变换的部分应用。 信号去噪。小波去噪是根据有效信号和噪声信号在小波变换后表现出的不同特性实现的&#xff0c;一般可用于去除语音、图像、视频等中的噪声信号。小波去噪方法根据对小波系数的非线性处理方式分为三类&#xff0c;分别是小波变换模极大值去噪…

电子电器架构新趋势 —— 最佳着力点:域控制器

电子电器架构新趋势 —— 最佳着力点&#xff1a;域控制器 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师&#xff08;Wechat&#xff1a;gongkenan2013&#xff09;。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师…

备战蓝桥杯---状态压缩DP基础1之棋盘问题

它只是一种手段&#xff0c;一种直观而高效地表示复杂状态的手段。 我们先来看一道比较基础的&#xff1a; 直接DFS是肯定不行&#xff0c;我们发现对某一行&#xff0c;只要它前面放的位置都一样&#xff0c;那么后面的结果也一样。 因此我们考虑用DP&#xff0c;并且只有0/…

蓝桥杯-单片机组基础6——定时计数器与外部中断混合使用(附小蜜蜂课程代码)

蓝桥杯单片机组备赛指南请查看这篇文章&#xff1a;戳此跳转蓝桥杯备赛指南文章 本文章针对蓝桥杯-单片机组比赛开发板所写&#xff0c;代码可直接在比赛开发板上使用。 型号&#xff1a;国信天长4T开发板&#xff08;绿板&#xff09;&#xff0c;芯片&#xff1a;IAP15F2K6…

4.1.CVAT——目标检测的标注详细步骤

文章目录 1. 进入任务1. 创建任务2. 已创建的task3. 进入标注界面 2. 选择标注类型2.1 选择标注类型2.2 进行标注2.3 遮挡 2.快捷键3.导出标注结果 1. 进入任务 登录后会看到如下图界面&#xff0c;CVAT的标注最小单位是Task&#xff0c;每个Task为一个标注任务。点击Task按钮…

[法规规划]国家数据局局长刘烈宏《激活数据要素价值》演讲要点解析

国家数据局党组书记、局长刘烈宏在北大光华论坛上发表了题为《激活数据要素价值》的演讲&#xff0c;当时曾极大推动了市场热度&#xff0c;引发了行业思考。现在演讲过去了一段时间&#xff0c;但是温故而知新&#xff0c;我们不妨结合演讲之后的市场反应&#xff0c;回顾一下…

html基本标签

<h1></h1> <p></p> h是标签从h1~h6&#xff0c;没用h7,h8 p是段落 <a href"https://www.educoder.net">Educoder平台</a> href可以指定链接进行跳转 <img src"https://www.educoder.net/attachments/download/2078…

【论文精读】DALLE: Zero-Shot Text-to-Image Generation零样本文本到图像生成

文章目录 一、前言二、摘要三、方法&#xff08;一&#xff09;主要目标&#xff08;二&#xff09;stage 1&#xff1a;训练离散变分自动编码器&#xff08;dVAE&#xff09;&#xff08;三&#xff09;stage 2&#xff1a;训练自回归转换器&#xff08;四&#xff09;公式表达…

Flutter开发之CupertinoApp

Flutter开发之CupertinoApp 最近由于使用Flutter编程更多&#xff0c;使用Flutter更顺手&#xff0c;相对于其他前端框架来说&#xff0c;Flutter在跨平台、响应式UI、自绘引擎、即插即用的组件和庞大的社区生态支持方面有更大的优势&#xff1b;Flutter拥有更低的学习成本&am…

gpt批量工具,gpt批量生成文章工具

GPT批量工具在今天的数字化时代扮演着越来越重要的角色&#xff0c;它们通过人工智能技术&#xff0c;可以自动批量生成各种类型的文章&#xff0c;为用户提供了便利和效率。本文将介绍5款不同的GPT批量工具&#xff0c;并介绍一款知名的147GPT生成工具&#xff0c;以及另外一款…

c++/c图的邻近矩阵表示

#include<iostream> using namespace std;#define MaxVerterNum 100 typedef char VerterType; typedef int EdgeType; typedef struct {VerterType vexs[MaxVerterNum]; // 存储顶点EdgeType edges[MaxVerterNum][MaxVerterNum]; // 存储邻接矩阵int n, e; // 顶点数和边…

netlink原理及应用

什么是netlink netlink是一种基于网络的通信机制&#xff0c;允许内核内部、内核与用户态应用之间甚至用户态应用之间进行通信&#xff1b;netlink的主要作用是内核与用户态之间通信&#xff1b;它的思想是&#xff0c;基于BSD的socket使用网络框架在内核和用户态之间进行通信…

GaussDB跨云容灾:实现跨地域的数据库高可用能力

背景 金融、银行业等对数据的安全有着较高的要求&#xff0c;同城容灾建设方案&#xff0c;在绝大多数场景下可以保证业务数据的安全性&#xff0c;但是在极端情况下&#xff0c;如遇不可抗力因素等&#xff0c;要保证数据的安全性&#xff0c;就需要采取跨地域的容灾方案。 …

Dell R730 2U服务器实践3:安装英伟达上代专业AI训练Nvidia P4计算卡

Dell R730是一款非常流行的服务器&#xff0c;2U的机箱可以放入两张显卡&#xff0c;这次先用一张英伟达上代专业级AI训练卡&#xff1a;P4卡做实验&#xff0c;本文记录安装过程。 简洁步骤&#xff1a; 打开机箱将P4显卡插在4号槽位关闭机箱安装驱动 详细步骤&#xff1a; 对…

网络工程师学习笔记——VRP配置命令大全

VRP是Versatile Routing Platform的简称&#xff0c;它是华为公司数据通信产品的通用网络操作系统。它以IP业务为核心&#xff0c;采用组件化的体系结构&#xff0c;在实现丰富功能特性的同时&#xff0c;还提供了基于应用的可裁剪和可扩展的功能&#xff0c;使得路由器和交换机…

计算机网络物理层知识点总结

本篇博客是基于谢希仁编写的《计算机网络》和王道考研视频总结出来的知识点&#xff0c;本篇总结的主要知识点是第二章的物理层。上一章的传送门&#xff1a;计算机网络体系结构-CSDN博客 通信基础 物理层概念 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流&am…

【Kubernetes】k8s中容器之间、pod之间如何进行网络通信?

目录 PodKubernetes 网络模型同一Pod上的容器之间进行通信同一Node上的不同Pod之间进行通信不同Node上的Pod之间进行通信Service参考 Pod 首先来回顾一下Pod&#xff1a; Pod 是用于构建应用程序的最小可部署对象。单个 Pod 代表集群中正在运行的工作负载&#xff0c;并封装一…

C++初阶篇----类与对象上卷

目录 引言1.面向过程和面向对象初步认识2.类的引入3.类的定义3.1声明与定义全部放在类体中3.2声明与定义分离 4.类的访问限定符及封装4.1访问限定符4.2封装 5.类的作用域6.类的实例化类是对对象进行描述一个类&#xff08;一个类型变量&#xff09;可以实例化出多个对象 7.类对…