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

C++ 嵌套类

嵌套类就是:在一个类的作用域里,又定义了一个类。

1、为什么引入嵌套类?

之所以引入这样一个嵌套类,往往是因为外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外层类的实现,同时可以对用户隐藏该底层实现。

可以这样理解:有一些工作不想被用户知道怎么实现的,那么就把这些工作交给嵌套类实现,然后对外层类提供一个接口即可。

class A 
{
private:
    class Imp;
    Imp* impl;
public:
    A();
    virtual ~A();
    void interface();
};

class A::Imp
{
public:
    void some_dirty_work() 
    { 
    	//...  
    }
};

A::A() : impl(new Imp) { }
A::~A() { delete impl; }
void A::interface() { impl->some_dirty_work() }

2、访问权

不管将嵌套类定义在外层类的什么作用域下(private,public,protected),嵌套类对外层类都没有特殊访问权限,即,仍然遵从private,public,protected的权限约束。 同样,外层类的成员函数也没有对嵌套类的成员的特殊访问权限。

嵌套类只能直接使用外层类的类型名,静态成员和枚举数。 若要使用其他成员,必须使用指针、引用、作用域或对象名。

外层类要访问嵌套类的成员只能通过指针、引用、作用域或对象名。

下图展示了嵌套类和外层类的访问权限:
在这里插入图片描述

相关文章:

  • CMake指令解析 set(CMAKE_CXX_FLAGS “$ENV{CXXFLAGS} -rdynamic -O3 -fPIC -ggdb -std=c++11 -Wall -Wno-deprec
  • 记一个测试sylar服务器日志模块时遇到的一个非常奇怪的问题
  • syscall()
  • 记一个编写宏时的错误
  • C++中全局变量,静态变量,静态局部变量 的初始化和内存分配问题
  • C++ 模板实现单例模式
  • 《C++ Primer》 异常
  • C++父类和子类指针的相互赋值和转换
  • 算法设计与分析————期末死亡冲刺
  • 现代软件工程————期末死亡冲刺
  • std::string::npos 常量解析
  • 练习4-3 求给定精度的简单交错序列部分和 (15 分)本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... 直到最后一项的绝对值不大于给定精度eps。
  • 浙大版《C语言程序设计(第4版)》题目集 练习4-6 猜数字游戏 (15 分)
  • 练习4-7 求e的近似值 (15 分)自然常数 e 可以用级数 1+1/1!+1/2!+⋯+1/n!+⋯ 来近似计算。本题要求对给定的非负整数 n,求该级数的前 n+1 项和。
  • 数组输入输出的方法
  • JS 中的深拷贝与浅拷贝
  • canvas 绘制双线技巧
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • in typeof instanceof ===这些运算符有什么作用
  • laravel5.5 视图共享数据
  • mac修复ab及siege安装
  • node入门
  • STAR法则
  • 前端技术周刊 2019-01-14:客户端存储
  • 前言-如何学习区块链
  • 使用putty远程连接linux
  • 提醒我喝水chrome插件开发指南
  • 微服务框架lagom
  • 用element的upload组件实现多图片上传和压缩
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • linux 淘宝开源监控工具tsar
  • ​ArcGIS Pro 如何批量删除字段
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #、%和$符号在OGNL表达式中经常出现
  • #define、const、typedef的差别
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (03)光刻——半导体电路的绘制
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (附源码)springboot教学评价 毕业设计 641310
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (三)c52学习之旅-点亮LED灯
  • (十三)Flask之特殊装饰器详解
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)原始图像数据和PDF中的图像数据
  • .net 反编译_.net反编译的相关问题
  • .Net下的签名与混淆
  • @ModelAttribute 注解
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [ solr入门 ] - 利用solrJ进行检索
  • [3D基础]理解计算机3D图形学中的坐标系变换
  • [acwing周赛复盘] 第 94 场周赛20230311
  • [ASP.NET MVC]Ajax与CustomErrors的尴尬