关于C++内部类的问题

mic*_*ael 16 c++

HI,

在C++内部类中,

class A {
    public: 
         void f1();
    private:
         void f2();
    class B {
       private void f3(); 
    };

 }
Run Code Online (Sandbox Code Playgroud)

内部类(B)是否有指向其父类(A)的指针?(就像在Java中一样).并且B可以调用其父类的公共/私有方法(就像在Java中一样).

谢谢.

Jer*_*fin 28

否 - 在C++中,嵌套类只影响名称和可见性,而不影响类本身的语义.就生成的代码而言,嵌套类与未嵌套的类没有区别.

所有改变的是可见性和名称(例如,如果它在private:外部类的一部分中,它对外部世界是不可见的,如果它在一个public:部分中,它是可见的,但(当然)命名它你使用outer_class::inner_class.它仍然是一个完全独立的类 - 例如,您可以创建内部类的实例而无需创建外部类的任何实例.

编辑:对不起,我错过了你的部分问题.在C++ 0x中,内部类可以访问外部类的私有部分 - 实质上,就好像外部类已经将内部类声明为其朋友,因此私有名称是可见的,但是您仍然需要在它可以调用外部类的任何非静态成员函数之前,将它传递给类外部对象的引用.

虽然事实并非如此,但我相信大多数编译器已经实现了这一特定部分.

  • 看来这在C++ 0x中正在发生变化.C++ 03说:"嵌套类的成员对封闭类的成员没有特殊的访问权限." C++ 0x FCD说:"嵌套类是一个成员,因此具有与任何其他成员相同的访问权限." (均为§11.8/ 1).(CWG缺陷45和494引入了这一变化:http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#45和http://www.open-std.org/ JTC1/SC22/WG21 /文档/ cwg_defects.html#494) (4认同)

Chr*_*s O 7

不,除非您明确添加,否则B类没有指向A类的指针.