类的相关知识(五)友元和嵌套类
目录
友元函数
友元类
嵌套类
在类的外面定义嵌套类
访问权限
局部类
友元函数
类的友元函数,该函数可以访问类中所有的成员,包括成员变量和成员函数
class Role
{int hp;int mp;void gethp(){std::cout<<hp;}friend void sethp(Role& r);
}
void sethp(Role& r)
{r.hp=300;r.gethp();
}
一个类可以有多个友元函数,不同的类可以有同个友元函数,当一个类声明了友元函数后,并不意味着这个函数就属于这个类,它并不是类的成员函数
以上可以看出,友元会破坏类的封装性,导致类可以访问私有属性
友元类
class Role
{int hp;int mp;Role1 r1;r1.lv=200;
}
class Role1
{int lv;fiend class Role;
}
这里第二个类声明了第一个类为友元函数,这样第一个类Role就能访问Role1的私有变量,但是Role1却不能访问Role,因为Role并没有声明其为它的友元
知识扩展*:友元会破坏类的封装性
嵌套类
嵌套就是把一个类声明在另一个类里面,外面的类叫做外层类,里面的类叫做嵌套类,一般来说,只有嵌套类只会被外层类一个类使用时,才会用嵌套,如果一定要调用这个类里面的嵌套类怎么办呢?
class Role
{
public:class weapon{int lv;}int hp;int mp;
}
int main()
{Role::weapon W;
}
如果一定要使用嵌套类,就要加上作用域,注意,如果嵌套类是私有属性,那么它的作用域就是私有的,就不能再用Role访问它。
在类的外面定义嵌套类
class Role
{
public:class weapon;int hp;int mp;
};
class Role::weapon
{
public:int lv;weapon* func();
};
Role::weapon::weapon* Role::weapon::func()
{return this;
}
在外面嵌套类的时候,要在嵌套类前面加上作用域,同时要在外层类里面声明是公有类还是私有类
如果要调用嵌套类里面的成员函数,不仅要在函数名钱加上作用域,在指针类型前面也要加上作用域,否则编译器不知道weapon是什么
访问权限
嵌套类可以访问外层类的所有成员,外层类只能访问嵌套类的公共成员
局部类
解释:写在函数里的类
1.局部类的成员函数定义只能写在类里面,因为如果在外面,函数是不能嵌套的,如果写成全局,那么就脱离了类的作用域,局部类的作用域仅限函数内
2.局部类不能写静态成员变量,而至于能不能使用静态成员函数,要看场景
3.局部类可以访问全局变量
嵌套类的模块化
如上例代码,先有Role后有的weapon,所以,如果是头文件分文件编写的话,要注意这个问题,比如
weapon.h头文件
#include <Role.h>
class Role::weapon
{
public:int lv;weapon* func();
};
Role.h头文件
#include <weapon.h>
class Role
{
public:class weapon;int hp;int mp;
};
编译Role.h的时候就会出错,因为当引入weapon头文件后,就相当于引入了它的全部代码,而Role::weapon里面的Role在Role.h中并未出现,所以会出错。
类的相关知识(五)友元和嵌套类相关推荐
- 【C++ Primer】第十五章 友元、异常和其他 --之一---友元和嵌套类
一,友元 1)可以将类作为友元,友元类的所有方法都可以访问原始类的私有成员和保护成员. 2)下面例子介绍了 电视类和遥控器类,其中遥控器类为电视类的友元类 3)注意:友元关系不具对称性.即 A 是 B ...
- 五类 六类网线相关知识
双绞线常见的有3类线,5类线和超5类线.6类线,以及最新的7类线.前者线径细而后者线径粗,型号如下: 一类线:主要用于传输语音(一类标准主要用于八十年代初之前的电话线缆),不同于数据传输. 二类线:传 ...
- 【JAVA中String类的相关知识】
文章目录 一.创建字符串 1.1创建字符串时的内存布局 二.字符串比较相等 2.1equals方法 三.字符串常量池 3.1实例化操作的内存布局 3.2intern手动入池 四.理解字符串不可变 4. ...
- 网络知识:七类网线相关知识介绍
今天给大家介绍一下七类网线相关的知识,希望对大家能有所帮助! 一.什么是七类网线? 我们平时用的最多就是超5类线了,对网络要求高的单位布线会使用六类网线. 但是对于七类网线可能接触的不多,它主要为了适 ...
- 计算机应用类专业综合知识月考试卷,计算机应用类专业综合复习试题(一)
计算机应用类专业综合知识考试试题 计算机应用类专业综合知识试题 一.选择题(在下列各小题的备选答案中,请把你认为正确答案的代号填入题 干后的括号内.多选.少选.错选不给分.每小题 3 分,共 54 分 ...
- c/c++开发,无可避免的自定义类类型(篇五).using与类设计
目录 一. using声明符 二.using在类定义中 三. using引起的函数覆盖或隐藏 四.using 引入基类构造函数的风险 五.using在多继承下的冲突问题 六.using 变更访问权限 ...
- Kotlin学习笔记 第二章 类与对象 第十节 内部类嵌套类
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...
- string类的相关知识及部分操作
文章目录 string对象的初始化 string::size_type类型 string对象的读写操作 使用标准库中的iostream 使用getline读取一整行 string对象的比较操作 str ...
- java 查看类_JAVA基础知识之JVM-——通过反射查看类信息
Class实例 当类被加载之后,JVM中就会生成一个Class实例,通过这个实例就可以访问JVM中的这个类.有三种方式可以获取Class对象 使用Class的静态方法forName(完整包名) 调用类 ...
最新文章
- mysql innodb 事务_Mysql InnoDB事务
- Winform中实现ZedGraph中曲线右键显示为中文
- php安装文档,PHP - Manual: 安装 (官方文档)
- 虚拟机linux和主机网络连接,linux虚拟机中和主机三种网络连接方式的区别
- php 给富文本里的图片增加ALT、TITLE属性
- Spring Boot(13)——使用RestTemplate
- PHP如何关闭notice级别的错误提示
- android 手机内存清理,安卓手机内存如何清理 安卓手机内存清理方法【介绍】
- 3月4日作业总结,成绩
- 为明天计划,而不要为明天忧虑
- 彪悍晨读 | 每天价值投资常识
- 攒齐智能产品组合,世界召唤四大超级力量
- 浅谈中国2050年人均受教育年限问题
- python程序员专用壁纸_神级python程序员分享的让小白30分钟快速上手的一张神图,赶快收藏!...
- 云轴科技 ZStack 与和信创天完成兼容性认证,打造稳定安全的桌面云!
- RSA的dp泄露 —— 【WUST-CTF2020】leak
- ArcGIS地质图矢量化技巧
- JPEX联手西悉尼流浪者队 推出250款独家NFT“J-ball”
- 【岩熹攻略】议息大会后,国庆主题迎布局良机!
- linux升级 nginx报错,Linux下升级nginx,编译安装nginx-sticky-module
热门文章
- 马上进入2018年了,但愿你还有被剥削的价值!因为AI失业潮真的开始了...
- M-Arch(雅特力M4)【AT-START-F425测评】No.06 驱动段码LCD
- HTML简介/HTML标签/案例
- oracle模糊匹配优化,Oracle 模糊查询 优化
- 一篇来自火星的营养减肥技巧
- 从GitHub上面下载zip压缩包很慢怎么办
- MD5碰撞后时代,MD5加密真的安全吗
- 第15周项目1-验证算法
- 以太坊区块链也拥堵_以太坊开发人员怀疑EOS刻意拥堵网络,ETH和EOS大战即将开启?...
- APISpace 带你一起走进西湖美景