目录

友元函数

友元类

嵌套类

在类的外面定义嵌套类

访问权限

局部类


友元函数

类的友元函数,该函数可以访问类中所有的成员,包括成员变量和成员函数

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中并未出现,所以会出错。

类的相关知识(五)友元和嵌套类相关推荐

  1. 【C++ Primer】第十五章 友元、异常和其他 --之一---友元和嵌套类

    一,友元 1)可以将类作为友元,友元类的所有方法都可以访问原始类的私有成员和保护成员. 2)下面例子介绍了 电视类和遥控器类,其中遥控器类为电视类的友元类 3)注意:友元关系不具对称性.即 A 是 B ...

  2. 五类 六类网线相关知识

    双绞线常见的有3类线,5类线和超5类线.6类线,以及最新的7类线.前者线径细而后者线径粗,型号如下: 一类线:主要用于传输语音(一类标准主要用于八十年代初之前的电话线缆),不同于数据传输. 二类线:传 ...

  3. 【JAVA中String类的相关知识】

    文章目录 一.创建字符串 1.1创建字符串时的内存布局 二.字符串比较相等 2.1equals方法 三.字符串常量池 3.1实例化操作的内存布局 3.2intern手动入池 四.理解字符串不可变 4. ...

  4. 网络知识:七类网线相关知识介绍

    今天给大家介绍一下七类网线相关的知识,希望对大家能有所帮助! 一.什么是七类网线? 我们平时用的最多就是超5类线了,对网络要求高的单位布线会使用六类网线. 但是对于七类网线可能接触的不多,它主要为了适 ...

  5. 计算机应用类专业综合知识月考试卷,计算机应用类专业综合复习试题(一)

    计算机应用类专业综合知识考试试题 计算机应用类专业综合知识试题 一.选择题(在下列各小题的备选答案中,请把你认为正确答案的代号填入题 干后的括号内.多选.少选.错选不给分.每小题 3 分,共 54 分 ...

  6. c/c++开发,无可避免的自定义类类型(篇五).using与类设计

    目录 一. using声明符 二.using在类定义中 三. using引起的函数覆盖或隐藏 四.using 引入基类构造函数的风险 五.using在多继承下的冲突问题 六.using 变更访问权限 ...

  7. Kotlin学习笔记 第二章 类与对象 第十节 内部类嵌套类

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  8. string类的相关知识及部分操作

    文章目录 string对象的初始化 string::size_type类型 string对象的读写操作 使用标准库中的iostream 使用getline读取一整行 string对象的比较操作 str ...

  9. java 查看类_JAVA基础知识之JVM-——通过反射查看类信息

    Class实例 当类被加载之后,JVM中就会生成一个Class实例,通过这个实例就可以访问JVM中的这个类.有三种方式可以获取Class对象 使用Class的静态方法forName(完整包名) 调用类 ...

最新文章

  1. mysql innodb 事务_Mysql InnoDB事务
  2. Winform中实现ZedGraph中曲线右键显示为中文
  3. php安装文档,PHP - Manual: 安装 (官方文档)
  4. 虚拟机linux和主机网络连接,linux虚拟机中和主机三种网络连接方式的区别
  5. php 给富文本里的图片增加ALT、TITLE属性
  6. Spring Boot(13)——使用RestTemplate
  7. PHP如何关闭notice级别的错误提示
  8. android 手机内存清理,安卓手机内存如何清理 安卓手机内存清理方法【介绍】
  9. 3月4日作业总结,成绩
  10. 为明天计划,而不要为明天忧虑
  11. 彪悍晨读 | 每天价值投资常识
  12. 攒齐智能产品组合,世界召唤四大超级力量
  13. 浅谈中国2050年人均受教育年限问题
  14. python程序员专用壁纸_神级python程序员分享的让小白30分钟快速上手的一张神图,赶快收藏!...
  15. 云轴科技 ZStack 与和信创天完成兼容性认证,打造稳定安全的桌面云!
  16. RSA的dp泄露 —— 【WUST-CTF2020】leak
  17. ArcGIS地质图矢量化技巧
  18. JPEX联手西悉尼流浪者队 推出250款独家NFT“J-ball”
  19. 【岩熹攻略】议息大会后,国庆主题迎布局良机!
  20. linux升级 nginx报错,Linux下升级nginx,编译安装nginx-sticky-module

热门文章

  1. 马上进入2018年了,但愿你还有被剥削的价值!因为AI失业潮真的开始了...
  2. M-Arch(雅特力M4)【AT-START-F425测评】No.06 驱动段码LCD
  3. HTML简介/HTML标签/案例
  4. oracle模糊匹配优化,Oracle 模糊查询 优化
  5. 一篇来自火星的营养减肥技巧
  6. 从GitHub上面下载zip压缩包很慢怎么办
  7. MD5碰撞后时代,MD5加密真的安全吗
  8. 第15周项目1-验证算法
  9. 以太坊区块链也拥堵_以太坊开发人员怀疑EOS刻意拥堵网络,ETH和EOS大战即将开启?...
  10. APISpace 带你一起走进西湖美景