C++初阶语法——static类成员

前言:本文将介绍类和对象中的static类成员——静态成员函数,静态成员变量的使用方法和注意点。在某些场景下,静态成员很有意义。

目录

  • 一.概念
  • 二.特性
    • 静态成员不存在对象中
  • 三.静态成员变量在类外初始化
  • 四.静态成员函数

一.概念

声明为static的类成员被称为类的静态成员,static修饰的成员变量称为静态成员变量,static修饰的成员函数称为静态成员函数。

二.特性

1.静态成员为所有类对象共享的,不属于某个具体的对象,存放在静态区
2.类静态成员即可用类名::静态成员或者对象.静态成员来访问。
3.静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明。
4.静态成员函数没有隐藏的this指针,不能访问非静态成员
5.静态成员也受public,private,protect访问限定符的限制。

静态成员不存在对象中

静态成员和成员函数一样,都是不存在对象中的。

用以下代码举例:

class A {
private:static int _a; //静态成员变量
};
int A::_a = 1; // 在类外定义初始化,用类名访问。
int main()
{cout << sizeof(A) << endl;return 0;
}

控制台输出:
在这里插入图片描述

我们知道,类的内存计算是遵循结构体对齐规则的,如果静态成员在对象中的话,输出结果应该为4,而现在输出结果为1(1为占位),则说明静态成员不存在对象中,它存在于静态区。

三.静态成员变量在类外初始化

这是重点,一定要记住。

class A {
private:static int _a; //静态成员变量声明//static int _a = 1 行不行???
};
int A::_a = 1; // 在类外初始化

在上面代码中博主给了个问题,声明静态成员函数时给个缺省值行不行?答案是不行的,因为声明处给缺省值实际上就是构造函数的初始化列表赋值,但是静态成员不属于某个具体的对象,也就是说静态成员函数不走初始化列表,故给个缺省值是无用的。

四.静态成员函数

跟常规成员函数不同,静态成员函数没有this指针。
静态成员函数不能访问非静态成员对象(因为没有this指针)。
静态成员对象和静态成员函数搭配使用。

class A {
public:/*void print() // _a是静态成员变量,常规成员函数不能访问静态成员对象{cout << _a << endl;}*/static void print() //需要写成静态成员函数才行{cout << _a << endl;}private:static int _a; //静态成员变量
};
int A::_a = 1; // 在类外初始化
int main()
{A::print(); //类名::访问函数return 0;
}

文末BB:对哪里有问题的朋友,尽管在评论区留言,若哪里写的有问题,也欢迎朋友们在评论区指出,博主看到后会第一时间确定修改。最后,制作不易,如果对朋友们有帮助的话,希望能给博主点点赞和关注.
在这里插入图片描述

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

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

相关文章

Python学习笔记_基础篇(五)_数据类型之字典

一.基本数据类型 整数&#xff1a;int 字符串&#xff1a;str(注&#xff1a;\t等于一个tab键) 布尔值&#xff1a; bool 列表&#xff1a;list 列表用[] 元祖&#xff1a;tuple 元祖用&#xff08;&#xff09; 字典&#xff1a;dict 注&#xff1a;所有的数据类型都存在想对…

[ MySQL ] — 基础增删查改的使用

目录 表的增删查改 Create 单行数据 全列插入 多行数据 全列插入 多行数据 指定列插入 不存在插入存在则更新 替换 Retrieve SELECT 列 全列查询 指定列查询 查询字段为表达式 为查询结果指定别名 结果去重 WHERE 条件 结果排序 筛选结果分页 Update De…

el-table 多个表格切换多选框显示bug

今天写了个功能&#xff0c;点击左侧的树做判断&#xff0c;一级树节点显示系统页面&#xff0c;二级树节点显示数据库页面&#xff0c;三级树节点显示表页面。 数据库页面和表页面分别有2个el-table ,上面的没有多选框&#xff0c;下面的有多选框 现在出现bug&#xff0c;在…

fastapi发布web配置页面

fastapi发布web配置页面 FastAPI 是一个基于 Python 的快速 Web 开发框架&#xff0c;它提供了许多功能来简化 Web 开发过程。其中一个重要的功能是能够轻松地创建 API 文档页面。 在 FastAPI 中&#xff0c;可以使用 OpenAPI 和 Swagger 来创建 API 文档页面。下面是一个简单…

iMazing2.17.3免费版苹果传输电脑端文件数据工具

苹果手机在日常使用过程中可能会遇到iPhone内存不足的情况&#xff0c;遇到这种情况很多用户会选择删除照片来节省存储空间&#xff0c;大量删除照片可能会误删重要照片。另外iPhone可能会遇到自动重启、黑屏等故障。手机突然损坏&#xff0c;数据无法导出&#xff0c;此时备份…

el-table实现纯前端查询列表(不走后端接口)

2023.8.16今天我学习了如何使用前端进行数据的查询&#xff0c;有时候后端会直接返回全部的数据&#xff0c;这时候我们就需要用前端进行查找数据。 首先elementUI有自带el-table查询的组件&#xff1a; Element - The worlds most popular Vue UI framework 我们发现在这段代…

QGraphicsView 实例3地图浏览器

主要介绍Graphics View框架&#xff0c;实现地图的浏览、放大、缩小&#xff0c;以及显示各个位置的视图、场景和地图坐标 效果图: mapwidget.h #ifndef MAPWIDGET_H #define MAPWIDGET_H #include <QLabel> #include <QMouseEvent> #include <QGraphicsView&…

飞天使-k8s简单搭建

文章目录 k8s概念安装部署-第一版无密钥配置与hosts与关闭swap开启ipv4转发安装前启用脚本开启ip_vs安装指定版本docker 安装kubeadm kubectl kubelet,此部分为基础构建模版 k8s一主一worker节点部署k8s三个master部署,如果负载均衡keepalived 不可用&#xff0c;可以用单节点做…

React Native文本添加下划线

import { StyleSheet } from react-nativeconst styles StyleSheet.create({mExchangeCopyText: {fontWeight: bold, color: #1677ff, textDecorationLine: underline} })export default styles

【hive】hive中row_number() rank() dense_rank()的用法

hive中row_number() rank() dense_rank()的用法 一、函数说明 主要是配合over()窗口函数来使用的&#xff0c;通过over(partition by order by )来反映统计值的记录。 rank() over()是跳跃排序&#xff0c;有两个第二名时接下来就是第四名(同样是在各个分组内)dense_rank() …

RocketMQ 5.0 架构解析:如何基于云原生架构支撑多元化场景

作者&#xff1a;隆基 本文将从技术角度了解 RocketMQ 的云原生架构&#xff0c;了解 RocketMQ 如何基于一套统一的架构支撑多元化的场景。 文章主要包含三部分内容。首先介绍 RocketMQ 5.0 的核心概念和架构概览&#xff1b;然后从集群角度出发&#xff0c;从宏观视角学习 R…

图数据库_Neo4j中文版_Centos7.9安装Neo4j社区版3.5.9_基于jdk1.8---Neo4j图数据库工作笔记0012

由于我们在国内使用啊,具体还是要用中文版滴,找了好久这个neo4j,原来还是有中文版的, https://we-yun.com/doc/neo4j-chs/ 中文版下载地址在这里: 所有版本都在这里了,需要哪个自己去下载就可以了,要注意下载以后,参考: https://we-yun.com/blog/prod-56.html 在这个位置下载…