嵌套类,这里指的是语法上的嵌套类,实际上是平行的关系。
外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的实现且同时可以对用户隐藏该底层实现。
- # include <iostream>
- using namespace std;
- class Outer
- {
- class Inner
- {
- public:
- void Fun()
- {
- cout << "Inner::Fun..." << endl;
- }
- };
- public:
- Inner obj_;
- void Fun()
- {
- cout <<"Outer::Fun..."<< endl;
- obj_.Fun();
- }
- };
- //嵌套类为外围类提供服务
- //外围类的使用到了嵌套类的实现,调用了嵌套类的方法
- int main(void)
- {
- Outer o;
- o.Fun();
- return 0;
- }
运行结果:
嵌套类中的成员函数可以在它的类体外定义
从作用域的角度看,嵌套类被隐藏在外围类之中,该类名只能
在外围类中使用。如果在外围类的作用域使用该域名时,需要
加名字限定。
嵌套类的成员函数对外围类的成员没有访问权,反之亦然。
嵌套类仅仅只是语法上的嵌入,平行的关系,外部也可以使用对象。
- # include <iostream>
- using namespace std;
- class Outer
- {
- public: //默认是私有,这里声明为公有,main函数才能 Outer::Inner i;
- class Inner
- {
- public:
- void Fun();
- //{
- // cout << "Inner::Fun..." << endl;
- //}
- };
- public:
- Inner obj_;
- void Fun()
- {
- cout<< "Outer::Fun..." << endl;
- obj_.Fun();
- }
- };
- //嵌套类中的成员函数可以在它的类体外定义
- void Outer::Inner::Fun()
- {
- cout << "Inner::Fun..." << endl;
- }
- int main(void)
- {
- //如果是私有的则不行,如果是公有的则可以
- Outer::Inner i;
- i.Fun();
- return 0;
- }
运行结果: