「C++学习笔记(十)」理解类中的静态成员变量与静态成员函数
yuyutoo 2025-01-05 00:09 3 浏览 0 评论
一. 类的静态成员
大家应该都知道静态变量,就是在变量前面加上static,类的静态成员也是同样的道理,在类的成员函数与成员变量前面加上static声明为类的静态成员。和静态变量的原理一样,不管这个类创建了多少个对象,静态成员只有一个拷贝,这个拷贝是被所有这个类的对象共享的。
二. 类的静态成员变量
(一)定义
类的静态变量即是在类中,用关键字static声明成员变量。无论建立了多少个对象,都只有一个静态变量的拷贝。静态成员变量,不属于某一个类对象,而只是属于这个类,对于所有类对象时共享的。
(二)重点记忆
1. 类的静态变量的分配空间
类的静态变量,在编译阶段就已经分配了空间,即还没有创建类对象时,就已经分配空间。 理解:同static变量一样,类的静态变量也是在编译阶段就分配好了空间。
2. 在为类对象分配空间中不包括静态成员所占空间。
理解:因为静态变量并不属于某个类对象,它是共享的,因此独立的类对象分配空间是不包括静态成员的空间的。
3. 类的静态变量可以通过类对象来访问,也可以通过类名直接访问。
理解:
(1)通过类对象访问是正常访问。
如下面代码所示:(我直接写类和调用了)
#include<iostream>
using namespace std;
class Person{
public:
Person(){};
static int a;
}
int Person::a = 0;
int main()
{
Person p1;
p1.a = 100;
Person p2;
p2.a = 200;
cout << "a1 = " << p1.a<<endl;
cout <<"a2 = " << p2.a << endl;
}
输出结果是什么呢? 当然是: a1 = 200; a2 = 200; 因为 a 是类的静态变量,是共享的,所以更改的都是同一个值。
(2)通过类名直接访问
如何通过类名直接访问呢?可以用下面代码所示调用:
Person::a;
因为static变量并不属于任何一个类对象,但是它属于这个类,因此可以直接用类名调用。
4. 静态成员变量必须在类中声明,在类外定义。
静态变量在类中声明static,为什么在类外定义呢?类中能否定义?答案是不行的。来看看代码。
#include<iostream>
using namespace std;
class Person{
public:
Person(int pa)
{
a = pa;
};
static int a;
}
int main()
{
cout <<Person::a << endl; //错误,无法访问到a
}
代码中,我们用 Person::a 的方式直接访问类的静态变量,是不会调用构造函数的,因此类中的 a 是没有定义的。所以最好是在类外定义类的静态变量。
三. 类的静态成员函数
(一). 定义
在类定义中,用static声明的成员函数为静态成员函数。使用方式与静态成员变量一样,都是通过类对象访问和类名直接访问。
(二)意义
类的静态成员函数的意义在于管理静态成员变量,完成对静态成员变量的封装。
(三). 重点记忆
1. 静态成员函数只能访问静态成员变量,不能访问普通成员变量。
理解:static成员函数是是共享的,存储在一块空间中,而普通的成员变量是属于每个类对象的,每个类对象存储在独立的空间中,若在静态成员函数中直接访问普通成员变量,那么它将无法区分普通的成员变量属于哪个类对象。
2.普通成员函数可访问静态成员变量、也可以访问普通成员变量。
理解:静态成员变量只有一份存储空间,普通成员函数可以直接识别,不会混淆。
以上就是类中的静态成员变量以及静态成员函数的理解,原创不易,多多鼓励!!!
关注公号【开发小鸽】,获取开发与深度学习资源,实战项目源码,最新论文下载,大厂面试经验!!!?
- 上一篇:CPU眼里的:变量
- 下一篇:C语言的随机数函数和静态变量
相关推荐
- 网站制作的流程是什么呢?简单大概的流程
-
关注我!了解更多网站建设的小干货~如今,随着网络时代的全面到来,网站在人们的生活和工作中发挥着极其重要的作用。网站制作的发展使更多的人加入了这个行业。如果你想掌握网站制作的知识,你可以在学校或网上学习...
- 一款谷歌(Google)打造的广告网页设计制作软件
-
GoogleWebDesigner是由谷歌(Google)打造的一款广告网页设计制作软件,它能够帮助从事于广告网页设计工作或是有这方面需求的用户更加有效快速的进行完成相关的行业设计工作,软件可以支...
- 普通网站如何制作一个网站?
-
对行外人来讲,在预备做一个网站项目时,最想了解的无非就是网站制作的悉数流程。网站制作是要有计划的,事先策划好才能更快更好的完成。网站的几个基本组成元素:域名+空间+程序+模板+维护经验+日常管理.网站...
- 用纯Python就能写一个漂亮的网页,再见HTML
-
再见HTML!用纯Python就能写一个漂亮的网页我们在写一个网站或者一个网页界面的时候,需要学习很多东西,对小白来说很困难!比如我要做一个简单的网页交互:天啊,听听头都大呢!其实我就给老板做一个...
- HTML表单4(form的action、method属性)——零基础自学网页制作
-
表单的工作过程表单的信息发送与处理过程可以简单的进行图示,如下图。以注册会员为例,用户在自己的电脑上打开相应的注册表单页面填写信息,完成填写后点击提交按钮,也就是图中1所示过程。这时浏览器会将这些信息...
- 官网网站设计网页制作模板建站前端自适应响应式网站仿站门户
-
案例背景航科慧联无人机搜索雷达能够在多种天气下检测到无人机的入侵、并获得目标的距离、方向和高度等具体信息,是无人机反制作战中的关键设备。航科慧联无人机搜索雷达能够在多种天气下检测到无人机的入侵、并获得...
- 软网推荐:在线制作软件图标
-
在制作PPT演示、软件、网页或其他程序时,我们往往需要用到一些个性化的图标。现在,即便是不安装任何软件,也可以上网在线制作自己需要的图标。首先访问如下制作网址:http://www.rw-design...
- 自定义跳转的h5网页如何制作?
-
文章来源:墨鹊微站...
- 网页如何制作?这几点要知道
-
这是一个个性张扬的时代,也是一个动手能力和动脑能力都比较强的时代,因此很多人对于能够自己动手完成的东西,都不太想假手于人。于是网页制作成了各大搜索引擎里面排名比较靠前的关键词之一。想要知道网页如何制作...
- 手机端网站简单制作教程,怎么快速制作一个移动端的网站
-
想要创建一个手机端的网站,需要有域名、已经完成网站页面的开发设计,零基础朋友不懂代码技术,直接在线套用乔拓云里面的网站模板来开发是比较简单可行的,进入乔拓云网,复制网站模板编辑网站的内容,注册域名后绑...
- 几张动图教你轻松了解Dreamweaver做网页
-
施老师:当今可是互联网时代,人们的生活、社交离不开互联网,那么不管你是网页设计师,还是销售达人,还是个体户,总必不可少的要在网上呈现一些页面给客户看,这个就是让你做网页,而Dreamweaver是做网...
- 用Deepseek制作网页版的汉诺塔游戏保姆级教程
-
在deepseek中输入:“帮我做一个网页版的汉诺塔演示游戏,游戏包含2层、3层、4层、5层的汉诺塔游戏演示,制作自动求解演示按钮,点击按钮就可以生成出步数,同时自动演示最优解动画。”...
- JS制作网页版计算器
-
大家晚上好,我是洁哥,抱歉今天有点晚了,但是洁哥不会缺席哦,今天我们来看一个JS实现网页版计算器的例题,先来看一看出来的效果吧(123+123=246)(123-123=0)(123*123=1512...
- 网页制作流程哪几步
-
在数字化时代,网页制作成为企业和个人展示形象、传递信息的重要方式。但是,许多人对于网页制作的流程仍感到困扰。为了解决这一问题,我们将深入探讨网页制作的关键步骤,助您更好地理解和应用这一过程。第一步:需...
- 这4个设计技巧,教你做好个人网页制作
-
随着互联网发展,个人建站已经不是什么稀奇事,学生、求职者、插画师、摄影师、作家……都可以制作个人网站,用来展示自身形象,或者吸引粉丝。那么如何做好个人网站呢?在不懂设计和技术知识的情况下,个人网页制作...
你 发表评论:
欢迎- 一周热门
-
-
前端面试:iframe 的优缺点? iframe有那些缺点
-
带斜线的表头制作好了,如何填充内容?这几种方法你更喜欢哪个?
-
漫学笔记之PHP.ini常用的配置信息
-
其实模版网站在开发工作中很重要,推荐几个参考站给大家
-
推荐7个模板代码和其他游戏源码下载的网址
-
[干货] JAVA - JVM - 2 内存两分 [干货]+java+-+jvm+-+2+内存两分吗
-
正在学习使用python搭建自动化测试框架?这个系统包你可能会用到
-
织梦(Dedecms)建站教程 织梦建站详细步骤
-
【开源分享】2024PHP在线客服系统源码(搭建教程+终身使用)
-
2024PHP在线客服系统源码+完全开源 带详细搭建教程
-
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)