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

static函数和友元

目录

static成员

概念:

特性:

判断题目:

面试题:

友元函数

理解一下cout的重载:

注意情况:

友元类

友元缺点:


static成员

概念:

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

特性:

1.静态成员为所有的类的对象所共享,不属于摸一个具体的对象,都会存放在静态区,可以去计算类的sizeof去判断,从结果我们可以知道静态成员不在类里面。

2.静态成员变量必须在类的外面进行定义,定义的时候回不需要去添加static关键字,类中只是去声明

3.如果想去访问类的静态成员可以用类名::静态成员或者对象.静态成员去访问

4.静态成员函数没有隐藏的this指针,多以说不能访问非静态的成员。(因为访问静态的成员要通过this指针去访问)、

5.静态成员从某种角度来说是全局的,只是收到了public和protected或者private访问限定符的限制

判断题目:

1.静态成员可以去调用非静态的成员函数(X

2.非静态的成员函数可以去调用类的静态成员函数(V

面试题:

在类里面查看创建出多少个类对象

解决方案:理工函数会构造,我们写一下构造函数,在构造函数里面写上一个变量进行++,这样我们就可以判断这个类里面有多少个成员对象。

友元函数

第一个问题:

如果现在去尝试重载operator<<,然后会发现没有办法去减肥operator<<给重载成成员函数,因为cout的输出流对象和隐函this指针总是回去抢占第一个参数的位置,this指针是默认将第一个参数(也就是左操作符),但是实际使用的cout需要的是第一个形参对象,才可以正常使用,所以要将operator<<重载称为全局函数,但是这样有会导致类的外面没有办法访问成员函数,这个时候就需要友元来解决同理operator也是这样。

加上域限定符值可以访问

理解一下cout的重载:

如果想要访问私有的情况下需要友元,可以在任何位置去声明

友元函数可以直接访问类的私有成员,友元的函数需要定义在类的外部,不属于任何类,但需要在类的内部声明,在声明的前面加上friend就可以了。

注意情况:

1.友元函数不能用const去修饰

2.友元函数可以在类的任何地方去定义,但是不受了类的访问限定符的限制

3.以个函数可以是多个类的友元函数

友元类

友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类的非共有成员

1.友元的关系是单向的,不能具有交换性

2.友元的关系不能传递

3.有元的关系不能继承

友元缺点:

友元虽然十分的便利,但是会增加耦合度,而且会破坏封装,这例面会在多多肽中使用


http://www.kler.cn/a/371046.html

相关文章:

  • Linux云计算 |【第五阶段】ARCHITECTURE-DAY5
  • 【华为HCIP实战课程十八】OSPF的外部路由类型,网络工程师
  • df -h 和df -i 的区别
  • pip命令行安装pytest 一直报错
  • springboot075电影评论网站系统设计与实现(论文+源码)_kaic
  • Bash、sh 和 Shell都弄混了?
  • 软考架构师论文范文(游戏后端)
  • 为 Python 项目配置 Git 忽略文件的实用指南
  • SSA-CNN-LSTM-MATT多头注意力机制多特征分类预测
  • vue2项目在发布后更新,提示用户刷新页面
  • MySQL史上最全总结
  • Go语言中数据类型与变量的用法
  • 算法训练(leetcode)二刷第十天 | 150. 逆波兰表达式求值、*239. 滑动窗口最大值、*347. 前 K 个高频元素
  • 明日周刊-第25期
  • Hash表算法
  • Python——自动化发送邮件
  • python数据处理及可视化
  • ELK:日志监控平台部署-基于elastic stack 8版本
  • 【flink】之kafka到kafka
  • DevOps和CI/CD以及在微服务架构中的作用