C++嵌套类的使用方法
来源:互联网 发布:凸优化求拟合误差 编辑:程序博客网 时间:2024/05/21 12:43
出处:http://blog.csdn.net/rabbit729/article/details/3334272
在一个类的内部定义另一个类,我们称之为嵌套类(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
- C++嵌套类的使用方法
- C++嵌套类的使用方法
- C++嵌套类的使用方法
- C#嵌套类的使用方法及特性
- C#嵌套类的使用方法及特性
- C#嵌套类的使用方法及特性
- C#嵌套类的使用方法及特性
- C#嵌套类的使用方法及特性
- android ViewPager嵌套的使用方法
- 嵌套类的使用方法之传输对象的种子
- 【C/C++】嵌套类
- [C#] DataRow类的使用方法
- [C#] DataRow类的使用方法
- c+中嵌套类的访问权限
- EcShop的foreach使用方法和三层嵌套
- C++_嵌套类
- C语言循环的嵌套
- C语言--printf的嵌套
- Image转BufferedImage
- FBS:数据清淡,非美维持低位整理
- c# 本地和远程连接数据库SQL和ACCESS的字符串
- 为什么magento的rewrite方法对抽象类无效
- 关于iPhone的Retina屏幕
- C++嵌套类的使用方法
- 教养感悟
- Google Play和基于功能的过滤(一)
- jQuery对象和DOM对象的区别及转换
- 实现 简单 的文件 储存--NSKeyedUnarchiver
- js获取当前系统时间
- iPhone开发之启动画面及动画
- ActiveMQ –JMS开源框架入门介绍
- [Spring]面向切面编程AOP【学习笔记】