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

C++系列-static成员

🌈个人主页:羽晨同学 

💫个人格言:“成为自己未来的主人~”  

概念

声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量,用static修饰的成员函数,称之为静态成员函数,静态成员变量一定要在类外进行初始化。

我们来看下面的这一段代码,思考一下,程序中创建出了多少个类对象。

#include<iostream>
using namespace std;
class A
{
public:A(){++_scount;}A(const A& t){++_scount;}static int GetAcount(){//this->return _scount;}
private:
//	int _a1 = 1;
//	int _a2 = 2;
//public:static int _scount;
};
int A::_scount = 0;
void TestA()
{cout << A::GetAcount() <<endl;A a1, a2;A a3(a1);cout << A::GetAcount() << endl;
}
int main()
{TestA();return 0;
}

 在上面的这段代码当中,我们可以获取到下面的几个知识点

  • 静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明
  • 类静态成员即可用类名::静态成员或者对象.静态成员来访问。
  • 静态成员函数没有隐藏的this指针, 不能访问任何非静态成员
  • 静态成员也是类的成员,受到public,protected,private等访问限定符的约束。

我们再来看下面的这段代码:

#include<iostream>
using namespace std;
class A
{
public:A(){++_scount;}A(const A& t){++_scount;}static int GetAcount(){//this->return _scount;}
private:int _a1 = 1;int _a2 = 2;
//public:static int _scount;
};
int A::_scount = 0;
void TestA()
{cout << A::GetAcount() <<endl;A a1, a2;A a3(a1);cout << A::GetAcount() << endl;
}
int main()
{A aa1;cout << sizeof(aa1) << endl;return 0;
}

 

我们可以看到,类的大小是4个字节,这个说明了什么呢?

说明静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区。

 

相关文章:

  • Spring Boot 项目统一异常处理
  • netplan
  • Visual Studio 的调试(一)
  • 42-4 应急响应之文件痕迹排查
  • Rust面试宝典第14题:旋转数组
  • Redis教程(十三):Redis的主从复制模式搭建
  • 【论文阅读】Prompt Fuzzing for Fuzz Driver Generation
  • 设计模式-中介者模式
  • SpringBoot+Mybatis 从头搭建通用管理系统
  • Linux环境下TensorFlow安装教程
  • 简单多状态 dp 问题
  • Facebook广告如何开户以及投放费用?
  • MySQL中创建触发器时,语法与创建存储过程或函数的语法有所不同注意
  • RobotFramework测试框架(1)--官网示例
  • ACM实训冲刺第十九天
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • AngularJS指令开发(1)——参数详解
  • ES6系列(二)变量的解构赋值
  • Mocha测试初探
  • SpiderData 2019年2月23日 DApp数据排行榜
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 分布式事物理论与实践
  • 关于List、List?、ListObject的区别
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • 说说我为什么看好Spring Cloud Alibaba
  • #git 撤消对文件的更改
  • #include
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • $.each()与$(selector).each()
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (BFS)hdoj2377-Bus Pass
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (C语言)逆序输出字符串
  • (done) 两个矩阵 “相似” 是什么意思?
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (undone) MIT6.824 Lecture1 笔记
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (一)80c52学习之旅-起始篇
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)为C# Windows服务添加安装程序
  • **CentOS7安装Maven**
  • .jks文件(JAVA KeyStore)
  • .NET COER+CONSUL微服务项目在CENTOS环境下的部署实践
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .net通过类组装数据转换为json并且传递给对方接口
  • /bin/bash^M: bad interpreter: No such file or directory
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...