类与对象(三)--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.友元关系不能继承

在这里插入图片描述

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

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

相关文章

CSP-J 2021 T1 分糖果

文章目录 题目传送门算法解析总代码提交记录尾声 题目传送门 洛谷 P7909 [CSP-J 2021] 分糖果 算法解析 首先简化一下题目&#xff1a;取一个值 k k k&#xff0c;使 L ≤ k ≤ R L \leq k \leq R L≤k≤R&#xff0c;输出最大的 k % n k \% n k%n 一个数 % n \% n %n…

Selenium常见元素操作,学完就能上手

web端自动化测试在回归测试、兼容测试扮演着举足轻重的角色&#xff0c;作为web自动化测试工程师&#xff0c;日常工作主要的部分就是编写自动化测试用例代码&#xff0c;借助的开源框架来说&#xff0c;目前市场占有率较高的仍然是selenium。 如何使用selenium完成web页面元素…

测试用例的一些设计好方法,学会就是赚到!

一、概述 测试用例设计方法是指根据测试目的和测试对象&#xff0c;选择合适的技术和策略&#xff0c;来生成测试用例的方法。 测试用例是指导测试过程的重要文档&#xff0c;主要包括用例编号、测试目的、测试步骤、预期结果等。测试用例的编写需要遵循一些原则&#xff0c;…

Deepl翻译相关介绍

DeepL是一种机器翻译软件&#xff0c;它在2017年首次发布。该软件利用了神经网络和深度学习技术&#xff0c;以提供更准确和自然的翻译结果。DeepL的翻译质量被广泛认为是当前机器翻译技术中最佳的之一。 官网&#xff1a;DeepL翻译&#xff1a;全世界最准确的翻译 DeepL具有许…

离散数学——特殊图思维导图

离散数学——特殊图思维导图 目录 前言 内容 大纲 参考 前言 这是当初学习离散数学时整理的笔记大纲&#xff0c;其中包含了自己对于一些知识点的体悟。现将其放在这里作为备份&#xff0c;也希望能够对你有所帮助。 当初记录这些笔记只是为了在复习时更快地找到对应的知…

自研cloud框架专题–web模块(三)

项目特点一:框架集成 1.引入核心依赖2.配置相关功能 二:功能介绍 1.swagger支持并提供swagger快速配置2.knife增强swagger支持3.全局请求参数校验(Validation)支持4.字段脱敏支持5.默认jackson序列化6.xss,cors支持7.访问日志支持8.全局异常处理,统一返回结果9.系统关键及常用信…

程序运行的基本流程

操作系统&#xff08;应用程序&#xff09;&#xff1a; 装系统就是将操作系统安装到硬盘1中 计算机启动的基本过程&#xff1a; 总结&#xff1a; 程序一般保存在硬盘中&#xff0c;软件安装的过程就是将程序写入硬盘的过程程序在运行时会加载进入内存&#xff0c;然后由CPU…

【Docker】若依ruoyi项目部署

一 搭建局域网 1 # 搭建net-ry局域网&#xff0c;用于部署若依项目docker network create net-ry --subnet172.68.0.0/16 --gateway172.68.0.1 # 注意1&#xff1a;关闭宿主机的防火墙&#xff0c;否者容器内部的MySQL、redis等服务&#xff0c;外部访问不了&#xff1b;开放…

VS配置开发与远程调试笔记

先简单写一下&#xff0c;后续详细补充 场景&#xff1a;本地机器开发&#xff0c;虚拟机调试 准备工作&#xff1a; 由于要将生成的文件生成在虚拟机&#xff0c;避免反复拷贝&#xff0c;直接配置虚拟机共享文件夹进行写入&#xff0c;步骤如下&#xff1a; 虚拟机打开网…

董宇辉所有商标已转到与辉同行名下!

近日董宇辉此前由东方优选申请的所有商标已转到与辉同行主体名下&#xff0c;普推知产老杨经检索发现&#xff0c;这些商标都是2022年6月由东方优选提交申请&#xff0c;在2023年12月28时提交商标转让&#xff0c;最近转让成功&#xff0c;转让周期是2个半月左右。 转让的商标除…

uniapp在页面中中获取pages.json下pages设置navigationBarTitleText这个值?uniapp获取页面标题

一、问题描述 有个需求就是,在app.vue页面中首先会隐藏所有页面的title,然后在相应的页面会判断当前环境是否是在微信浏览器内&#xff0c;如果不是&#xff0c;则还原标题。 二、解决方法 在 pages.json 文件中设置 navigationBarTitleText&#xff0c;例如&#xff1a; {&qu…

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

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