c++类的嵌套(1)
在一个类的内部定义另一个类或结构体,我们称之为嵌套类(nested class),或者嵌套类型。之所以引入这样一个嵌套类,往往是因为外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的实现,且同时可以对用户隐藏该底层实现。
虽然嵌套类在外围类内部定义,但它是一个独立的类,基本上与外围类不相关。它的成员不属于外围类,同样,外围类的成员也不属于该嵌套类。嵌套类的出现只是 告诉外围类有一个这样的类型成员供外围类使用。并且,外围类对嵌套类成员的访问没有任何特权,嵌套类对外围类成员的访问也同样如此,它们都遵循普通类所具 有的标号访问控制。
前面说过,之所以使用嵌套类的另一个原因是达到底层实现隐藏的目的。为了实现这种目的,我们需要在另一个头文件中定义该 嵌套类,而只在外围类中前向声明这个嵌套类即可。当然,在外围类外面定义这个嵌套类时,应该使用外围类进行限定。使用时,只需要在外围类的实现文件中包含 这个头文件即可。
另外,嵌套类可以直接引用外围类的静态成员、类型名和枚举成员,即使这些是private的。
实例如下:
- #ifndef NESTCLASS_H_
- #define NESTCLASS_H_
- class A
- {
- public:
- A();
- ~A();
- void operate();
- private:
- class B;
- B* m_b;
- };
- #endif
- #include "nestclass.h"
- #include <iostream>
- using namespace std;
- class A::B
- {
- public:
- B(){}
- ~B(){}
- void operate()
- {
- cout<<"B operate!"<<endl;
- }
- };
- A::A()
- {
- }
- A::~A()
- {
- }
- void A::operate()
- {
- m_b = new B;
- cout<<"A operate!"<<endl;
- m_b->operate();
- }
- #include "nestclass.h"
- void main()
- {
- A a;
- a.operate();
- }
在嵌套类的定义被看到之前我们只能声明嵌套类的指针和引用,如上面在A中定义为B m_b而不是B* m_b将会引发一个编译错误。关于C++嵌套类的详细用法请参考《C++ Primer 第三版》P551
复制自德问 的 freeboy1015 原地址 http://www.dewen.io/q/9309
转载于:https://www.cnblogs.com/littleby/p/4984983.html
c++类的嵌套(1)相关推荐
- python中类的嵌套_python类的嵌套
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 在.net和java语言中看到过嵌套类的实现,作为外部类一个局部工具还是很有用的 ...
- 类模板,多种类型的类模板,自定义类模板,类模板的默认类型,数组的模板实现,友元和类模板,友元函数,类模板与静态变量,类模板与普通类之间互相继承,类模板作为模板参数,类嵌套,类模板嵌套,类包装器
1.第一个最简单的类模板案例 #include "mainwindow.h" #include <QApplication> #include <QPush ...
- c++ 嵌套私有类_嵌套类和私有方法
c++ 嵌套私有类 当您在另一个类中有一个类时,他们可以看到彼此的private方法. 在Java开发人员中并不为人所知. 面试过程中的许多候选人说, private是一种可见性,它使代码可以查看成员 ...
- C++ 模板类的嵌套
模板类的嵌套 使用函数模板,当参数是自定义数据类型(如结构体,类)时,需要通过第三代具体化自定义数据类型来解决问题. 那么对于类模板中的成员对象的数据类型也是自定义数据类型呢. 实际上,只要类中包括了 ...
- 类中嵌套子类如何JSON转换
在开发中会经常遇到一个Java类中嵌套List集合,集合中又是另外一个类,那么在Json转换的时候可能会遇到无法转换,下面这个方法就可以完美解决 public class IM_UserAccount ...
- (教学思路 C#之类五)类的分类(静态类、实例类、嵌套类、结构、简单的抽象类、简单的密封类)...
本节课我们来学习类的扩展分类,看我的标题中就罗列出了类的分类,类按照声明方式和功能定义共分为这六种类,实例类就是我们一直在用的类,class关键字前没有其他的修饰符,之前已经有很多实例类的使用方法了, ...
- 实体类多层嵌套 遍历_多层嵌套的json数据
很多时候我们见到的json数据都是多层嵌套的,就像下面这般: {"name":"桔子桑","sex":"男"," ...
- day20Map集合(HashMapTreeMap)Collections工具类集合嵌套
Map接口的概述 将键映射到值的对象. Map不能包含重复的键; 每个键可以映射到最多一个值. Map接口与Collection接口有什么区别? ...
- 实体类多层嵌套 遍历_JS获取元素多层嵌套思路详解
如果一段html嵌套过多,在js中获取还是比较麻烦的,我写了几套方案,大家可以参考参考,如果你有好的方法,也分享出来,让我们瞧瞧. HTML: 元素多层嵌套,JS获取问题 span span 1 2 ...
最新文章
- docker如何移除所有的mysql_docker容器删除了,link怎么还在?
- 微软职位内部推荐-Senior Software Engineer-Eco
- 要建设数据中心吗?IDC数据中心的四大要求来了解一下!
- 人生何为苦何为乐何为幸福
- 爬取小说《重生之狂暴火法》 1~140章
- Docker安装MySQL 8 for Mac(图文详解)
- nest 设置密码_如何设置Nest Cam
- 欢迎关注个人微信公众账号~
- linux alarm函数clock,linux c之alarm函数的使用,定时器的实现
- 考研计算机专业英语面试自我介绍,计算机研究生面试英文自我介绍
- 关于LCD1602液显的使用细则
- web程序无法访问:The requested resource () is not available.错误
- java.sql.timestamp_java.sql.Date和java.sql.Timestamp转换
- Oracle卸载的全过程
- 某宝上关于PMP低价续证,可信吗?
- 网络基础之网络协议篇
- 【展馆设计】互动多媒体投影有哪些实用价值
- Wdf框架之WdfObject状态机(3)-前篇
- [网鼎杯 2020 玄武组]SSRFMe【redis主从复制ssrf】
- Python对阿里云物联网MQTT设备接入端开发
热门文章
- Access to the path ‘‘ is denied.解决方案
- Proxmox VE中出现TASK ERROR: command ‘apt-get update‘ failed: exit code 100的解决方法
- 针对github权限导致hexo部署失败的解决方案
- CORS - 引入预检请求的动机是什么?
- 如何在电脑上删除磁盘碎片
- 教你win7显卡驱动如何安装,win7电脑显卡驱动的安装方法
- 华为电脑c盘哪些文件可以删除,c盘可以删除哪些文件
- ubuntu20.04系统 ros noetic下安裝orbslam2
- RabbitMQ的工作模式Routing 路由,test测试代
- 常见移动机器人轮直径校准实验思路