类与对象(三)--static成员、友元

类与对象

文章目录

  • 1.static成员
    • 1.1概念🎧
    • 面试题✒️
    • 1.2static的特性🎧
    • 1.3思考🎧
  • 2.友元
    • 2.1什么是友元?🎧
    • 2.2两种友元关系:🎧

1.static成员

1.1概念🎧

🔎 static关键字用于声明类的静态成员变量和静态成员函数。静态成员变量与特定的类相关联,而不是与类的实例相关联。它们的值对于类的所有实例都是共享的。另外,静态成员变量一定要在类外进行初始化

面试题✒️

实现一个类,计算程序中创建出了多少个类对象

class A
{
public:
	A() {
		++_scount;
	}
	A(const A& t) {
		++_scount;
	}
	~A() {
		--_scount;
	}
	static int GetACount() {
		return _scount;
	}
private:
	static int _scount;
};

int A::_scount = 0;//初始化


void TestA()
{
	cout << A::GetACount() << endl;
	A a1, a2;
	A a3(a1);
	cout << A::GetACount() << endl;
}

✋以上代码中的A类成员变量用一个static修饰的变量_scount来记录实例化对象的个数。如果一个对象调用构造函数就会使_scount++,调用析构函数清理时又会使_scount–

1.2static的特性🎧

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

1.3思考🎧

1.静态成员函数可以调用非静态成员函数吗?不行

显然,静态成员函数不与特定的类实例相关联,不访问非静态成员变量或非静态成员函数,因为它们没有 this 指针
在这里插入图片描述
2. 非静态成员函数可以调用类的静态成员函数吗? 可以 在这里插入图片描述

2.友元

2.1什么是友元?🎧

在c++中,友元(Friend)是一种机制允许一个类或函数访问另一个类的私有成员。通过使用友元关键字,可以将某个函数或类声明为另一个类的友元,从而赋予它对该类私有成员的访问权限。

2.2两种友元关系:🎧

1️⃣.函数友元:一个函数被声明为另一个类的友元,使得该函数能够访问该类的私有成员
在这里插入图片描述
✋A类成员变量由于被private权限限制符修饰,不能被直接访问。现在我们将Print()函数声明为A类的友元函数,这样在Print()函数中就可以直接访问A类对象的私有变量_num了
在这里插入图片描述
2️⃣.类友元:一个类被声明为另一个类的友元,使得该类的所有成员函数都能够访问该类的私有成员
在这里插入图片描述
✋B类的Print()函数中无法访问A类的私有成员,现在在A类中声明B类为友元类,这样一来就可以在B类中成功访问到A类的所有成员
在这里插入图片描述
⭐️值得注意的是
1.声明友元并不是相互的,是单向的
假设B是A的友元类,那么只允许B类访问A类的私有变量,但是A类不可以访问B类的私有变量,除非也将A类置为B类的友元。
2.友元关系不能传递
如果C是B的友元, B是A的友元,则不能说明C时A的友元
3.友元关系不能继承

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloudAlibaba微服务之Nacos架构及基础概念梳理

SpringCloudAlibaba微服务之Nacos架构及基础概念梳理 文章目录 SpringCloudAlibaba微服务之Nacos架构及基础概念梳理1. 官网介绍1. 简介2. Naocs是什么3. Nacos 地图4. Nacos 生态图 2. Nacos 架构1. 基本架构及概念1. 服务 (Service)2. 服务注册中心 (Service Registry)3. 服务…

第四届信息通信与软件工程国际会议(ICICSE 2024)即将召开!

2024年第四届信息通信与软件工程国际会议&#xff08;ICICSE 2024&#xff09;将于2024年5月10-12日在中国北京举办。本次会议由北京工业大学、IEEE以及Comsoc 联合主办。随着当今社会信息化的高速发展&#xff0c;电子信息技术的应用更是随处可见。其中&#xff0c;信息通信与…

K倍区间(蓝桥杯)

文章目录 K倍区间题目描述前缀和数学优化代码部分解释 K倍区间 题目描述 给定一个长度为 N的数列&#xff0c;A1,A2,…AN&#xff0c;如果其中一段连续的子序列 Ai,Ai1,…Aj 之和是 K的倍数&#xff0c;我们就称这个区间 [i,j]是 K倍区间。 你能求出数列中总共有多少个 K倍区…

Zabbix(四)

Zabbix Proxy zabbix作为一个分布式监控系统(分布式监控解决方案)&#xff0c;支持通过代理(proxy)收集zabbix agent的监控数据&#xff0c;然后由zabbix proxy再把数据发送给zabbix server&#xff0c;也就是zabbix proxy 可以代替zabbix server收集监控数据&#xff0c;然后…

Mybatis-Spring | Mybatis与Spring的“整合“

目录 : 一、配置环境1. 整合环境需导入的JAR :Spring框架所需JARMybatis框架所需JARMyBatis与Spring整合的中间JAR数据库驱动JAR包数据源所需JAR包 &#xff08;下面的例子中 : 用的不是这个数据源&#xff09; 2. 编写“配置文件” 和 “.properties文件” ( 只是概述&#xf…

电磁铁通电后测不到磁场是什么原因

电磁铁 电磁铁没有磁力的一般原因有多种&#xff0c;以下是一些常见原因&#xff1a; 1. 电源问题&#xff1a;电磁铁没有连接好电源或电源电压不足&#xff0c;无法产生足够强的磁场。电磁铁所需要的电流和电压应符合制造商的规定。另外的话&#xff0c;电源接头也需要注意接…

SAP 消息编号 M8147

月末执行物料分类账的时候&#xff0c;出现以下报错 解决方法&#xff1a;OBYC-PRM

Linux运维:实现光盘开机自动挂载、配置本地yum源教程

Linux运维&#xff1a;实现光盘开机自动挂载、配置本地yum源教程 一、光盘开机自动挂载1、检查光驱设备2、创建挂载点3、编辑/etc/fstab文件4、测试挂载 二、配置本地yum源(挂载光盘或ISO文件)1、挂载ISO文件2、创建YUM仓库配置文件3、清理YUM缓存并测试 &#x1f496;The Begi…

萌新小白对于ctf学习的笔记--CTF中的RCE

概念 RCE(Remote code execution&#xff09;远程代码执行漏洞&#xff0c;RCE又分命令执行和代码执行。 RCE-远程代码执行&#xff1a;远程执行PHP代码RCE-远程命令执行&#xff1a;远程执行Linux或者Windows等系统命令。 常见函数有&#xff1a; PHP&#xff1a;eval(),a…

解决syslog服务器启动问题

Syslog 监控和管理对于每个组织来说都很重要&#xff0c;可以减少系统停机时间、提高网络性能并加强企业的安全策略。而在网络系统管理中&#xff0c;syslog服务用于收集、存储和管理系统和设备的日志信息。 然而&#xff0c;有时候我们可能会遇到syslog服务器无法启动的问题&…

mysql中 COALESCE和CASE WHEN的使用以及创建或替换视图

create or replace view 自理能力评估视图 as SELECT ehr_zlnlpg.ID AS ID, ehr_zlnlpg.GRID AS GRID, ehr_zlnlpg.TJID AS TJID, ehr_grjbxx.Name AS 姓名, ehr_grjbxx.Sex AS 性别, ehr_grjbxx.Cardnum AS 身份证号, ehr_zlnlpg.SCORESUM AS 总…

[每周一更]-第90期:认识Intel的CPU

市面上的CPU分类主要分有两大阵营&#xff0c;一个是Intel、AMD为首的复杂指令集CPU&#xff0c;另一个是以IBM、ARM为首的精简指令集CPU。 两个不同品牌的CPU&#xff0c;其产品的架构也不相同&#xff0c;例如&#xff0c;Intel、AMD的CPU是X86架构的&#xff0c;而IBM公司的…

基于java+springboot+vue实现的校园悬赏任务平台(文末源码+Lw)23-277

摘 要 使用旧方法对校园悬赏任务平台的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在校园悬赏任务平台的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。这次开发的…

STM32 | Proteus 8.6安装步骤(图文并茂)

01 Proteus 8.6 简介 Proteus 8.6 是一款功能强大的电子设计自动化软件&#xff0c;广泛用于电路设计、仿真和PCB布局。它为电子工程师和学生提供了一个全面的工具集&#xff0c;用于设计和验证各种电路和电子设备。Proteus 8.6 包括了以下几个主要特性&#xff1a; 1. 电路设…

云计算 3月8号 (WEB服务及Apache 服务的搭建与配置——基于域名 端口 Ip多方式访问)

1、WEB服务简介 # 目前最主流的三个Web服务器是Apache、Nginx、 IIS。 - WEB服务器一般指网站服务器&#xff0c;可以向浏览器等Web客户端提供网站的访问&#xff0c;让全世界浏览。 - WEB服务器也称为WWW(WORLD WIDE WEB)服务器&#xff0c;主要功能是提供网上信息浏览服务。 …

【lua】lua内存优化记录

这边有一个Unity项目用的tolua&#xff0c; 游戏运行后手机上lua内存占用 基本要到 189M&#xff0c; 之前峰值有200多。 优化点1 加快gc频度&#xff1a; 用uwa抓取的lua内存&#xff0c; 和unity的mono很像&#xff0c;内存会先涨 然后突然gc一下&#xff0c;降下来。 这样…

S4---FPGA-K7板级原理图硬件实战

视频链接 FPGA-K7板级系统硬件实战01_哔哩哔哩_bilibili FPGA-K7板级原理图硬件实战 基于XC7K325TFFG900的FPGA硬件实战框图 基于XILINX 的KINTEX-7 芯片XC7K325FPGA的硬件平台&#xff0c;FPGA 开发板挂载了4 片512MB 的高速DDR3 SDRAM 芯片&#xff0c;另外板上带有一个SODIM…

RabbitMQ的Windows版安装教程

文章目录 前言一、Windows安装RabbitMQ总结 前言 曾经写过一篇关于RabbitMQ的Ubuntu安装教程&#xff08;http://t.csdnimg.cn/5CYfC&#xff09;&#xff0c;当时使用的是Docker将RabbitMQ安装到虚拟机上&#xff0c;但是有很多小伙伴问Windows上如何进行安装RabbitMQ&#x…

根据xlsx文件第一列的网址爬虫

seleniumXpath 在与该ipynb文件同文件下新增一个111.xlsx&#xff0c;第一列放一堆需要爬虫的同样式网页 然后使用seleniumXpath爬虫 from selenium import webdriver from selenium.webdriver.common.by import By import openpyxl import timedef crawl_data(driver, url)…

【力扣白嫖日记】1164.指定日期的产品价格

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 1164.指定日期的铲平价格 表&#xff1a;Products 列名类型product_idintnew_priceintchange_datedate (pr…