c++ 学习之 静态成员变量和静态成员函数

文章目录

  • 前言
  • 正文
    • 静态成员变量
      • 初始化操作
      • 如何理解共享一份数据
      • 访问权限
    • 静态成员函数
      • 访问方式
      • 静态成员函数只能访问静态成员变量
      • 访问权限

前言

静态成员分为
1)静态成员变量

  • 所有对象共享一份数据
  • 在编译阶段分配空间
  • 类内声明,类外初始化
    2)静态成员函数
  • 所有对象共享一个函数
  • 静态成员函数只能访问静态成员变量

正文

静态成员变量

初始化操作

  • 静态变量要进行初始化操作,不然使用的时候会报错
    我们来看看下面的代码:
#define CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;class Person {
public:static int m_A;};void test()
{Person p;cout << p.m_A << endl;
}int main()
{test();
}

上面的代码会报错,因为调用 p.m_A 的时候由于它没有被赋初值,所以会报错
在这里插入图片描述
那怎么解决这个问题呢?
可以在类内初始化吗?
答案是不可以
在这里插入图片描述
那究竟该如何初始化呢
我们要在类外初始化
在这里插入图片描述
这样就解决问题了

如何理解共享一份数据

看完下面这个代码和运行结果你就会了解了

#define CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;// 静态成员分为
// 1)静态成员变量
// * 所有对象共享一份数据
// * 在编译阶段分配空间
// * 类内声明,类外初始化
// 2)静态成员函数
// * 所有对象共享一个函数
// * 静态成员函数只能访问静态成员变量class Person {
public:// 类内声明static int m_A ;};// 类外初始化操作
int Person::m_A = 100;void test()
{Person p;cout << p.m_A << endl;// 再实例化一个对象Person B;cout << B.m_A << endl;B.m_A = 200;cout << p.m_A << endl;cout << B.m_A << endl;
}int main()
{test();
}

在这里插入图片描述
静态成员变量的访问方式有两种

#define CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;// 静态成员分为
// 1)静态成员变量
// * 所有对象共享一份数据
// * 在编译阶段分配空间
// * 类内声明,类外初始化
// 2)静态成员函数
// * 所有对象共享一个函数
// * 静态成员函数只能访问静态成员变量class Person {
public:// 类内声明static int m_A ;};// 类外初始化操作
int Person::m_A = 100;void test()
{Person p;cout << p.m_A << endl;// 再实例化一个对象Person B;cout << B.m_A << endl;B.m_A = 200;cout << p.m_A << endl;cout << B.m_A << endl;
}void test02()
{// 静态成员变量 不属于某个对象上,所有对象都共享同一份对象// 因此静态成员变量有两种访问方式// 1.通过对象进行访问Person p;cout << p.m_A << endl;// 2.通过类名进行访问cout << Person::m_A << endl;
}int main()
{//test();test02();
}

访问权限

如果静态成员变量是在 private 属性的,那么类外无法访问
在这里插入图片描述
在类外中 m_B 无法被访问

静态成员函数

访问方式

有两种访问方式

#define CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;// 静态成员分为
// 1)静态成员变量
// * 所有对象共享一份数据
// * 在编译阶段分配空间
// * 类内声明,类外初始化
// 2)静态成员函数
// * 所有对象共享一个函数
// * 静态成员函数只能访问静态成员变量class Person
{
public:// 静态成员函数static void fun(){cout << " static void fun 函数 调用  " << endl;}
};// 有两种访问方式
void test01()
{// 1.通过对象访问Person p;p.fun();// 2.通过类名访问Person::fun();
}int main()
{test01();
}

静态成员函数只能访问静态成员变量

class Person
{
public:// 静态成员函数static void fun(){cout << " static void fun 函数 调用  " << endl;m_A = 100;  //(正确) 静态成员函数可以访问 静态成员函数m_B = 100;  // (错误) 静态成员函数不可以访问 非静态成员函数,无法区分是哪个实例的 m_B}static int m_A;   //静态成员变量int m_B;   // 非静态成员变量
};
int Person::m_A = 10;

访问权限

如果静态成员函数是 private 权限下的,外部也不能访问

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

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

相关文章

Spring 怎么解决循环依赖的呢?

Spring 怎么解决循环依赖 什么是循环依赖那 Spring 怎么解决循环依赖的呢&#xff1f;为什么要三级缓存&#xff1f;⼆级不⾏吗&#xff1f; 什么是循环依赖 Spring 循环依赖&#xff1a;简单说就是自己依赖自己&#xff0c;或者和别的 Bean 相互依赖。 只有单例的 Bean 才存在…

软件测试中的43个功能测试点总结

功能测试就是对产品的各功能进行验证&#xff0c;根据功能测试用例&#xff0c;逐项测试&#xff0c;检查产品是否达到用户要求的功能。针对web系统的常用测试方法如下&#xff1a; 1、页面链接检查&#xff1a; 每一个链接是否都有对应的页面&#xff0c;并且页面之间切换正…

设计模式系列-原型模式

一、上篇回顾 上篇创建者模式中&#xff0c;我们主要讲述了创建者的几类实现方案&#xff0c;和创建者模式的应用的场景和特点&#xff0c;创建者模式适合创建复杂的对象&#xff0c;并且这些对象的每 个组成部分的详细创建步骤可以是动态的变化的&#xff0c;但是每个对象的组…

剑指 Offer 07. 重建二叉树

题目描述 输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 解题思路 首先&#xff0c;根据前序遍历结果确定根节点。前序遍历的第一个元素即为根节点的值。 接下来&#xff0c…

第29节-PhotoShop基础课程-滤镜库

文章目录 前言1.滤镜库2.Camera Raw滤镜 &#xff08;用来对图片进行预处理&#xff0c;最全面的一个&#xff09;3.神经滤镜&#xff08;2022插件 需要先下载&#xff09;4.液化&#xff08;胖-> 瘦 矮->高&#xff09;5.其它滤镜1.自适应广角2.镜头矫正 把图片放正3.消…

Kafka详解

目录 一、消息系统 1、点对点的消息系统 2、发布-订阅消息系统 二、Apache Kafka 简介 三、Apache Kafka基本原理 3.1 分布式和分区&#xff08;distributed、partitioned&#xff09; 3.2 副本&#xff08;replicated &#xff09; 3.3 整体数据流程 3.4 消息传送机制…

JP《乡村振兴振兴战略下传统村落文化旅游设计》许少辉书香续,山水长

JP《乡村振兴振兴战略下传统村落文化旅游设计》许少辉书香续&#xff0c;山水长

Vue2+Vue3基础入门到实战项目(前接六 副线一)—— 面经 项目

day1 接口文档地址&#xff1a;https://www.apifox.cn/apidoc/project-934563/api-20384515 一、项目功能演示 1.目标 启动准备好的代码&#xff0c;演示移动端面经内容&#xff0c;明确功能模块 2.项目收获 二、项目创建目录初始化 vue-cli 建项目 1.安装脚手架 (已安装…

WebSocket的那些事(5-Spring STOMP支持之连接外部消息代理)

目录 一、序言二、开启RabbitMQ外部消息代理三、代码示例1、Maven依赖项2、相关实体3、自定义用户认证拦截器4、Websocket外部消息代理配置5、ChatController6、前端页面chat.html 四、测试示例1、群聊、私聊、后台定时推送测试2、登录RabbitMQ控制台查看队列信息 五、结语 一、…

第4章_瑞萨MCU零基础入门系列教程之瑞萨 MCU 源码设计规范

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

deepin V23通过flathub安装steam畅玩游戏

deepin V23缺少32位库&#xff0c;在星火商店安装的steam,打开报错&#xff0c;无法使用&#xff01; 通过flathub网站安装steam,可以正常使用&#xff0c;详细教程如下&#xff1a; flathub网址&#xff1a;主页 | Flathub 注意&#xff1a;flathub下载速度慢&#xff0c;只…

Redis从基础到进阶篇(四)----性能调优、分布式锁与缓存问题

目录 一、Redis 集群演变 1.1 ReplicationSentinel*高可用 1.2 ProxyReplicationSentinel(仅仅了解) 1.3 Redis Cluster 集群 (重点&#xff09; 1.3.1 Redis-cluster架构图 1.3.2 工作原理 1.3.3 主从切换 1.3.4 副本漂移 1.3.5 分片漂移 二、Redis版本历史&#xf…

ODC现已开源:与开发者共创企业级的数据库协同开发工具

OceanBase 开发者中心&#xff08;OceanBase Developer Center&#xff0c;以下简称 ODC&#xff09;是一款开源的数据库开发和数据库管理协同工具&#xff0c;从首个版本上线距今已经发展了三年有余&#xff0c;ODC 逐步由一款专为 OceanBase 打造的开发者工具演进成为支持多数…

xCode14.3.1运行MonkeyDev出现“Executable Not Found“的解决办法

安装MonkeyDev遇到的坑 环境&#xff1a;Xcode Version 14.3.1 (14E300c) 错误提示 is not a valid path to an executable file. 报错 /Users/xxxx//Library/Developer/Xcode/DerivedData/MonTest-ccparhdyzjuqhjdergwrngpfwwoh/Build/Products/Debug-iphoneos/MonTest.app…

go-zerogo web集成redis实战

前言 上一篇&#xff1a;go-zero&go web集成JWT和cobra命令行工具实战 从零开始基于go-zero搭建go web项目实战-03集成redis实战 源码仓库地址 源码 https://gitee.com/li_zheng/treasure-box golang redis 客户端 Go-Redis 地址&#xff1a; GitHub: https://github.…

Maven 知识点总结

文章目录 Maven1、Maven 坐标2、Maven 仓库3、Maven 依赖依赖配置依赖范围依赖调解原则排除依赖 4、Maven 生命周期5、Maven 聚合与继承 Maven Maven是一个项目管理工具&#xff0c;它包含了项目对象模型&#xff08;POM&#xff1a;Project Object Model&#xff09;&#xf…

windows系统docker中将vue项目网站部署在nginx上

一、首先在windows系统上下载并安装docker&#xff0c;要下载windows版本 https://www.docker.com/products/docker-desktop/ PS&#xff1a;安装过程中需要WSL&#xff0c;我的是win11系统&#xff0c;直接提示了我安装就可以下一步了。其他windows系统版本我不知道是否需要单…

简化转换器:使用您理解的单词进行最先进的 NLP — 第 1 部分 — 输入

一、说明 变形金刚是一种深度学习架构&#xff0c;为人工智能的发展做出了杰出贡献。这是人工智能和整个技术领域的一个重要阶段&#xff0c;但也有点复杂。截至今天&#xff0c;变形金刚上有很多很好的资源&#xff0c;那么为什么要再制作一个呢&#xff1f;两个原因&#xff…

# Spring MVC与RESTful API:如何设计高效的Web接口

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

数学建模--K-means聚类的Python实现

目录 1.算法流程简介 2.1.K-mean算法核心代码 2.2.K-mean算法效果展示 3.1.肘部法算法核心代码 3.2.肘部法算法效果展示 1.算法流程简介 #k-means聚类方法 """ k-means聚类算法流程: 1.K-mean均值聚类的方法就是先随机选择k个对象作为初始聚类中心. 2.这…