首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

嵌套种与外围类的私有成员

2012-12-20 
嵌套类与外围类的私有成员嵌套类以外围类对象为自己的私有数据成员,难道就能通过这个对象去访问外围类对象

嵌套类与外围类的私有成员
嵌套类以外围类对象为自己的私有数据成员,难道就能通过这个对象去访问外围类对象的私有成员?

#include <iostream>

 class test
 {
 public:
     class item;
 private:
     int i;
     test():i(10) {}
     void f()
     {
         std::cout<<i+1<<std::endl;
     }
 };
 class test::item
 {
     test a;
 public:
     void print()
     {
         std::cout<<a.i<<std::endl;//能访问私有成员?
         a.f();                    //同上
     }
 };
 int main()
 {    
     test::item b;
     b.print();
     return 0;
 }
 

[最优解释]
item是test的一部分,就跟test的成员函数访问私有变量差不多。
[其他解释]
引用:
首先这里并没有声明友类。按你们说的,但显然不是因为item是嵌套类所以相当于友元,又是否是因为嵌套类中用了外围类的对象作为子对象,才有此状况?
  可不可以这样说:若一个类用另一个类对象作为子对象,那么这个类就是子对象所在类的友类?


其实,类的基本概念理解了,就行了。这个属于类最基本的概念(类的成员函数可以访问private变量)里的。
只是初看起来有点陌生罢了。
[其他解释]
差点被搞晕了。
当然可以。有点和有元差不多。但item要通过test来访问。
[其他解释]
同意楼上,相当于友类了吧。
[其他解释]
首先这里并没有声明友类。按你们说的,但显然不是因为item是嵌套类所以相当于友元,又是否是因为嵌套类中用了外围类的对象作为子对象,才有此状况?
  可不可以这样说:若一个类用另一个类对象作为子对象,那么这个类就是子对象所在类的友类?
[其他解释]
要友元声明,以及预先类声明
class Ar1;//可以放到Ar2可见的任何地方
class Ar2
{
friend class Ar1;
class Ar1
{
};
};
这样
[其他解释]
嗯,明白了谢谢大家
[其他解释]
帮楼主总结一下:

好好查了一些资料,也敲了一边代码。
总结来自:http://xingfinal.blog.163.com/blog/static/9792456820104875055927/
这里讲了访问的控制。

其实嵌套类和外围类基本是两个互不相干的类。但是有些访问还是要注意的。
1. 嵌套类的只对外围类可见。
    就是说用嵌套类的话,就要用外围类去限定。
2. 外围类访问不到嵌套类的私有成员。
3. 嵌套类可以通过外围类的对象、指针或引用访问外围类的所有成员。
    为什么要通过类的对象、指针或引用呢?因为一般的成员需要实例化才会真正的实体本身的。
4. 嵌套类可以直接访问外围类的静态成员,类型名,枚举值。
    为什么会可以直接访问呢,因为静态成员,类型名,枚举值不属于任何对象的实例化。
5. 因为这两个类不怎么相干,所以他们的sizeof得到的值也互不相干。

说到底,应该是一种实现机制吧,或者实现规定吧。
可以去查查嵌套类的作用或目的。

热点排行