C++ 学习之旅(11)——类和结构中的static
当我们使用 static
关键字来把类或者结构成员定义为静态的时侯,无论之后创建多少个类的对象(实例),静态成员都只有一个副本,所有实例都共享这个副本。也就是说,静态成员已经不属于实例了,它归属于类,是一种类普遍存在的属性,而与实例无关。
注意我们不能把静态成员的初始化放置在类的定义中,静态成员变量在类中仅仅是声明,没有定义,所以要在类的外面定义,也就是给静态成员变量分配内存。在类的外部通过使用范围解析运算符 ::
来重新声明静态变量从而对它进行初始化,如下:
#include <iostream>class Entity
{public:static int x, y; //声明static void Print(){std::cout << x << "," << y << std::endl;}
};int Entity::x; //定义
int Entity::y; //定义int main()
{Entity::x = 1;Entity::y = 3;Entity::Print();Entity::x = 5;Entity::y = 8;Entity::Print();std::cin.get();
}
可以看到,静态成员在类当中只是声明,而定义在外面,后面的赋值也是直接赋值,甚至不需要创建任何实例,静态成员是脱离于实例的。
而静态成员函数只能访问静态成员数据、其他静态成员函数和类外部的其他函数。如以下代码:
#include <iostream>class Entity
{public:int x, y;static void Print(){std::cout << x << "," << y << std::endl;}
};int main()
{Entity e1;e1.x = 1;e1.y = 3;Entity::Print();std::cin.get();
}
是不会通过的,因为它相当于以下可运行代码,但是把Print(Entity e)
改为Print()
:
#include <iostream>class Entity
{public:int x, y;
};static void Print(Entity e)
{std::cout << e.x << "," << e.y << std::endl;
}int main()
{Entity e1;e1.x = 1;e1.y = 3;Print(e1);std::cin.get();
}
也就是说,类的静态成员函数同样是与某个特定实例无关的,它归属于类。所以我们无法向它传入某个实例的成员(配不上),必须得是静态成员数据才能作为它的参数。
C++ 学习之旅(11)——类和结构中的static相关推荐
- 乐鑫Esp32学习之旅11 入门 乐鑫esp-adf 音频框架开发,造一个蓝牙耳机,实现切换歌曲,获取歌曲信息等功能。(附带Demo)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 " ...
- python历史背景_python学习之旅1-1(python背景、安装介绍)
一.python介绍 1.python历史背景 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打发时 ...
- 【Java学习日记】#11 类与对象 #3 对象
对象 对象的特性 对象的创建 对象的引用 对象的使用 对象的销毁 对象的特性 对象的创建 使用new操作符调用构造方法就可以创建一个对象. 创建一个Test类对象: Test test1 = new ...
- Unity之C#学习笔记(11):静态类型 Static
前篇链接:Unity之C#学习笔记(10):接口和多态 Interfaces and Polymorphism 静态类型(Static)用一句话概括就是:在程序运行期间只会被创建一份的通用内容,用关键 ...
- LINQ学习之旅——最后一站LTX之基础和编程接口所包含类的简介
对LINQ TO SQL的内容讲解将告一段落,下面我们进入LINQ学习之旅的最后一站"LTX",即LINQ TO XML.当前XML技术在应用开发中显得越来越重要,已成为各类数据交 ...
- java多线程阶乘_【java学习记录】11.用多线程实现阶乘的计算过程和结果的读取(thread类ReadThread )...
(源码在上传的压缩包"[java学习记录]11.多线程实现阶乘计算(Thread类和Runnable接口)"中可看到,该压缩包可下载)java * 采用Thread类的子类实现线程 ...
- 学计算机手机必备软件,精选推荐:手机电脑里的11类值得分享的“神器”,囊括你工作学习以及生活的方方面面...
精选推荐:手机电脑里的11类值得分享的"神器",囊括你工作学习以及生活的方方面面 2019-12-04 19:25:38 5点赞 29收藏 1评论 现如今的我们,工作和生活里的方方 ...
- AD学习之旅(4)— 新建芯片类原理图库器件
AD学习之旅(4)- 新建芯片类原理图库器件 一.前言 本文参考: [Altium500问]第006问 IC类器件的元件模型如何创建? [Altium500问]第007问 原理图库中如何使用封装向导快 ...
- AD学习之旅(11)— 绘制PCB图
AD学习之旅(11)- 绘制PCB图 一.前言 当我们把元器件都导入PCB文件后,就可以开始PCB图的绘制了 本文参考:https://www.bilibili.com/video/BV16t411N ...
最新文章
- 004-什么是软件测试?软件测试的目的与原则
- python如何进行数据抓取_如何进行手机APP的数据爬取?
- 【Android 应用开发】Paint 渲染 之 BitmapShader 位图渲染 ( 渲染流程 | CLAMP 拉伸最后像素 | REPEAT 重复绘制图片 | MIRROR 绘制反向图片 )
- Linq to sql查询句法
- mysql binlog 权限_MySQL如何开启binlog?binlog三种模式的分析
- linux内核栈,内核同步,用户空间线程同步
- python函数应用实例_【Python 第22课】 函数应用示例
- 华为开源构建工具_为什么我构建了用于大数据测试和质量控制的开源工具
- 基于上一篇AS项目依赖库问题的优化解决方案
- 15.用户故事与敏捷方法——Scrum与用户故事笔记
- 在verilog中调用VHDL模块
- hdu acm 2569
- H5之微信授权登陆 (uniapp网页版微信授权登录)
- Google kickstart 2013 Practice Round Captain Hammer 题解
- Tomcat启动缓慢 Creation of SecureRandom instance for ... 花费时间过长的解决方法
- C++STL accumulate函数
- meb备份mysql_恢复使用MEB备份的MySQL数据库
- 艺体计算机教师考核细则,艺体教师考核细则.docx
- 第三章 人类社会及其发展规律
- 蓝桥杯同一类型题目汇总
热门文章
- 复习深入笔记01:对象/可变与不可变类型/字符编码/闭包
- android 调用c wcf服务,如何使用命名管道从c调用WCF方法?
- C语言试题九十二之输入数据有多行,第一行是一个整数n,表示测试用例的个数,后面跟着n行 ,每行包括一个由字母和数字组成的字符串
- IOS之学习笔记九(对象的初始化)
- Android之面试题精选,自己收藏下
- 结构体数组排列_学习RTOS(3)数据结构
- 球体表面积原来还可以这么求!
- 5部适合学英语的动画电影,快和孩子一起看!
- 16张扎心漫画,戳中女生私密日常,每一幕都很真实
- 除了PS,原来这个也可以轻松实现图像处理!