首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >关于C++内部类的问题

关于C++内部类的问题
EN

Stack Overflow用户
提问于 2010-04-22 08:53:18
回答 3查看 14.3K关注 0票数 16

嗨,

在C++内部类中,

代码语言:javascript
复制
class A {
    public: 
         void f1();
    private:
         void f2();
    class B {
       private void f3(); 
    };

 }

内部类(B)是否有指向其父类(A)的指针?(就像在Java中一样)。并且can B调用它的父类public/private方法(就像在Java中一样)。

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-22 08:57:18

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

所有更改的是可见性和名称(例如,如果它位于外部类的private:部分,则对外部世界不可见,如果位于public:部分,则它是可见的,但(当然)要将其命名为outer_class::inner_class。但它仍然是一个完全独立的类--例如,您可以创建内部类的实例,而不创建外部类的任何实例。

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

虽然现在还不是这样,但我相信大多数编译器已经实现了这一部分。

票数 28
EN

Stack Overflow用户

发布于 2010-04-22 08:54:42

不,B类没有指向A类的指针,除非您显式添加它。

票数 7
EN

Stack Overflow用户

发布于 2010-04-22 09:05:29

它是否有指向父对象的指针:没有。

它是否有权访问父母的私有成员:某种程度上

我认为,如果标准中没有很好地定义它是否具有访问权限,我可能就错了。

但您可以在g++中访问它

代码语言:javascript
复制
#include <iostream>

class X
{
    class Y
    {
        public:
            Y(X* p)
                :parent(p)
            {}
            void TryY()
            {
                // Access a private member of X
                ++(parent->value);
            }

        private:
            X*  parent;
    };

    public:
        X()
            :y(this)
        {
            value = 4;
        }

        void TryY()
        {
            y.TryY();
            std::cout << value << std::endl;
        }
    private:
        Y   y;
        int value;

};

int main()
{
    X   x;
    x.TryY();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2687544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档