You Know What is C++嵌套类

news2025/1/21 11:57:00

C++嵌套类

  • 一、嵌套类
    • 1.嵌套类和访问权限
    • 2.作用域
    • 3.访问控制

一、嵌套类

  • 在一个类的内部定义另一个类,我们称之为嵌套类,或者嵌套类型。
  • 引入嵌套类,因为外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的实现,且同时可以对用户隐藏该底层实现。
  • 嵌套类在外围类内部定义,但它是一个独立的类,基本上与外围类不相关。
  • 嵌套类不可以访问外围类的任何成员,同样,外围类的成员也不属于该嵌套类。
  • 外围类可以通过对象访问嵌套类的公有成员,但不能访问保护和私有成员。嵌套类只能由外围类使用。

1.嵌套类和访问权限

  • 有两种访问权限适合嵌套类,首先,嵌套类的声明位置决定了嵌套类的作用域,即它决定了程序的那些部分可以创建这种类的对象。
  • 其次,和其他类一样,嵌套类的公有部分,保护部分和私有部分控制了对类成员的访问。在那些地方可以使用嵌套类以及如何使用嵌套类,取决于作用域和访问控制。

2.作用域

  • 若嵌套类声明在一个类的私有部分,则只有嵌套类的外部类可以知道它,才可以调用它。
  • 若嵌套类声明在一个类的保护部分,对于后者是可见的,对于外界是不可见的。派生类知道该嵌套类,并且可以直接创建这种类型的对象。
  • 若嵌套类声明在一个类的公有部分,则允许后者,后者的派生类以及外部世界使用。然后在外部使用时,必须加上外部的外部类的作用域,如:有下面的声明:

class Team
{
public:
	class Coach{...};
	...
	};
}

现在假定有一个失业的教练,他不属于任何球队。要在Team类的外面创建Coach对象,可以这样做:

Team::Coach forhire;//在类外面创建教练对象
嵌套结构和枚举的作用域与此相同。许多程序员使用公有枚举来提供客户程序员使用的类常数。

下面的表总结了:嵌套类,结构,枚举的作用域特征:
在这里插入图片描述

3.访问控制

在外部类中声明嵌套类并没有赋予外部类任何对嵌套类的访问权限,也没有赋予任何嵌套类对于外部类的访问权限。与一般类的访问控制相同(私有,公有,保护)。

//外部访问嵌套类
#include<iostream>
using namespace std;
class test
{
public:
    test()
    {
        i=10;//不能访问
        mytest::i=10;//不能访问
    }
private:
    class mytest
    {
        int i;
        int j;
    };
};

上面不能直接访问mystet的成员,试着通过对象访问:

#include<iostream>
using namespace std;
class test
{
public:
    test()
    {
        cc.i=10;//通过对象可以访问,如果i为私有则不可访问
        cc.j=20;
    }
private:
    class mytest
    {
    public:
        int i;
        int j;
    };
    mytest cc;
};

在外部类中声明一个嵌套类的对象,然后再外部类中利用该对象访问嵌套类,访问的规则与普通类相同。
在嵌套类中访问外部类: 因为嵌套类中没有任何对外部类的访问权限。因此只有在嵌套类中定义了改对象,才能够访问其非静态成员,但此时外部类是一个不完整的类型(类没有定义完成)。因此想在嵌套类内部访问外部类是无法做到的。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

黑马JVM总结(二十七)

&#xff08;1&#xff09;synchronized代码块 synchronized代码块的底层原理&#xff0c;它是给一个对象进行一个加锁操作&#xff0c;它是如何保证如果你出现了synchronized代码块中出现了问题&#xff0c;它需要给这个对象有一个正确的解锁操作呢&#xff0c;加锁解锁是成对…

为什么网络安全明明缺口很大,却看起来招聘很少呢?

2023 年我国网络空间安全人才数量缺口超过了 140 万&#xff0c;就业人数却只有 10 多万&#xff0c;缺口高达了 93%。这里就有人会问了&#xff1a; 1、网络安全行业为什么这么缺人&#xff1f; 2、明明人才那么稀缺&#xff0c;为什么招聘时招安全的人员却没有那么多呢&…

10、【Qlib】【主要组件】高频交易嵌套决策执行框架

10、【Qlib】【主要组件】高频交易嵌套决策执行框架 简介简介 日间交易(例如,投资组合管理)和当日交易(例如,订单执行)是量化投资中的两个热门话题,并且通常会分别进行研究。 为了获得日间和当日交易的联合交易绩效,它们必须相互作用,并共同进行回测。为了支持多级的…

7.Tensors For Beginneers - Convector Components

介绍协向量时&#xff0c;曾说过它们有点像 行向量&#xff0c; 行向量确实以某种方式代表了协向量&#xff0c; 这里说明一下&#xff1a; 协向量是不变的&#xff1b; 协向量组件是可变的。 协向量不依赖坐标系&#xff0c;协向量的组件取决于坐标系。 当我们说协向量具有组…

基于SSM的旅游攻略网站设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

【SpringCloud】微服务技术栈入门3 - Gateway快速上手

目录 GatewayWebFlux网关基本配置过滤器与断言工厂全局过滤器跨域处理 CORS Gateway WebFlux gateway 基于 webflux 构建 WebFlux 是基于反应式流概念的响应式编程框架&#xff0c;用于构建异步非阻塞的 Web 应用程序。它支持响应式编程范式&#xff0c;并提供了一种响应式的方…

Java中阻塞队列原理、特点、适用场景

文章目录 阻塞队列对比、总览阻塞队列本质思想主要队列讲解ArrayBlockingQueueLinkedBlockingQueueSynchronousQueueLinkedTransferQueuePriorityBlockingQueueDelayQueueLinkedBlockingDeque 阻塞队列对比、总览 阻塞队列本质思想 阻塞队列都是线程安全的队列. 其最主要的功能…

3分钟基于Chat GPT完成工作中的小程序

1. 写在前面 GPT自从去年爆发以来&#xff0c;各大公司在大模型方面持续发力&#xff0c;行业大模型也如雨后春笋一般发展迅速&#xff0c;日常工作中比较多的应用场景还是问答模式&#xff0c;作为写程序的辅助也偶尔使用。今天看到一篇翻译的博客“我用 ChatGPT&#xff0c;…

python通过socket 搭建极简web服务器

环境&#xff1a;win11、python 3.9.2 背景&#xff1a;python的web框架众多&#xff0c;常见的如django、flask、tornado等&#xff0c;其底层是什么还是有些许的疑问&#xff0c;所以查找相关资料&#xff0c;实现浏览器访问&#xff0c;并返回相关信息 时间&#xff1a;20…

期权定价模型系列【8】:选择者期权(chooser option)定价模型

期权定价模型系列第8篇文章 1.前言 抉择型期权又称为随心所欲期权&#xff0c;是一种与时间相关的期权。这种期权的持有 人有权在到期日之前的某一段时期&#xff0c;决定该选择权为买权或卖权。因此&#xff0c;在决定的时间点&#xff0c;抉择型期权的价值应该为&#xff1a;…

命令解释器-Shell

目录 1. 概述 1.1. 概念 1.2. 分类&#xff1a; 1.3. type 命令 1.4.命令执行原理 2. Linux 中的特殊符号 3. 命令别名 3.1. 查看设置的别名 3.2. 常用的别名 3.3. 删除别名 3.6. 注意&#xff08;alias永久化&#xff09;&#xff1a; 4. history 命令历史 例&a…

已解决:win的资源管理器右键菜单被折叠无法显示全内容?教你解决

win11在样式上整挺好的&#xff0c;那种圆润感是win10没法比拟的&#xff0c;但是有一个很严重的诟病&#xff0c;就是右键菜单的折叠&#xff0c;这个东西是资源管理器新增的一个功能&#xff0c;如果之前是win右键的重度用户&#xff0c;那么对于这种需要多点一步展开的操作&…

解决报错: require is not defined in ES module scope

用node启动mjs文件报错&#xff1a;require is not defined in ES module scope 现象如下&#xff1a; 原因&#xff1a; 文件后缀是mjs, 被识别为es模块&#xff0c;但是node默认是commonjs格式&#xff0c;不支持也不能识别es模块。 解决办法&#xff1a;把文件后缀从.mjs改…

【进阶C语言】排序函数(qsort)与模拟实现(回调函数的实例)

本章大致内容目录&#xff1a; 1.认识回调函数 2.排序函数qsort 3.模拟实现qsort 回调函数为C语言重要知识点&#xff0c;以函数指针为主要知识&#xff1b;下面介绍回调函数的定义、回调函数的库函数举例即库函数模拟实现。 一、回调函数 1.回调函数定义 回调函数就是一…

16哈希表-基础操作

目录 哈希表 散列思想 哈希表的实现 简单示例 开胃菜&#xff1a;LeetCode之路——242. 有效的字母异位词 分析 哈希表 英文名字为Hash table&#xff0c;散列表的英文叫“Hash Table”&#xff0c;我们平时也叫它“哈希表”或者“Hash表”。 哈希表&#xff08;Hash Ta…

vue3中使用return语句返回this.$emit(),在同一行不执行,换行后才执行,好奇怪!

今天练习TodoList任务列表案例,该案例效果如图所示&#xff1a; 此案例除了根组件App.vue&#xff0c;还有TodoList、TodoInput、TodoButton三个子组件。 因为有视频讲解&#xff0c;在制作TodoList、TodoInput时很顺利&#xff0c;只是在完成TodoButton这个组件时出了点问题…

VR开发(一)——SteamVR实现摇杆移动

一、基础环境搭建 1.AssetStore 找到SteamVR并导入&#xff1b; 2.添加一个 VR 中代表玩家自己的物体。我可以打开 Assets/SteamVR/InteractionSystem/Core 文件夹&#xff0c;将 Player 物体拖入场景&#xff1a; 二、修改手柄按钮映射集 3.windows/steamVR input&#xff…

【程序员必看】计算机网络,快速了解网络层次、常用协议和物理设备!

文章目录 0 引言1 基础知识的定义1.1 计算机网络层次1.2 网络供应商 ISP1.3 猫、路由器、交换机1.4 IP协议1.5 TCP、UDP协议1.6 HTTP、HTTPS、FTP协议1.7 Web、Web浏览器、Web服务器1.8 以太网和WLAN1.9 Socket &#xff08;网络套接字&#xff09; 2 总结 0 引言 在学习的过程…

OpenResty编译安装详解

文章目录 一、概述1、OpenResty是什么2、官方文档 二、cengos安装OpenResty1、从官网下载2、目录结构3、编译安装 一、概述 1、OpenResty是什么 OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台&#xff0c;其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖…