Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 关于C++;内部阶级_C++ - Fatal编程技术网

C++ 关于C++;内部阶级

C++ 关于C++;内部阶级,c++,C++,嗨 内部类, class A { public: void f1(); private: void f2(); class B { private void f3(); }; } 内部类(B)是否有指向其父类(a)的指针?(就像在Java中一样)。 can B可以调用其父类public/private方法(就像在Java中一样) 谢谢。 < P>不,B类没有指针A类,除非显式添加它。< P>不——在C++

内部类,

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

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


谢谢。

< P>不,B类没有指针A类,除非显式添加它。

< P>不——在C++中,嵌套类只影响名称和可见性,而不影响类本身的语义。就生成的代码而言,嵌套类与非嵌套类没有区别

更改的只是可见性和名称(例如,如果它位于外部类的
private:
部分,则外部世界看不到它,如果它位于
public:
部分,则它是可见的,但是(当然)要命名它,可以使用
outer\u class::internal\u class
。但是它仍然是一个完全独立的类——例如,您可以创建内部类的实例,而不创建任何外部类的实例

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


虽然目前还不应该是这样,但我相信大多数编译器已经实现了这个特定部分。

它是否有指向父级的指针:否。
它是否可以访问父母的私人成员:某种程度上

我认为标准I中没有很好地定义if-it-have-access,这可能是错误的。
但是你可以在g中访问它++

#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();
}
#包括
X类
{
Y类
{
公众:
Y(X*p)
:家长(p)
{}
void TryY()
{
//访问X的私有成员
++(父->值);
}
私人:
X*父母;
};
公众:
X()
:y(本)
{
数值=4;
}
void TryY()
{
y、 TryY();

std::难道这在C++0x中似乎正在改变。C++03说:“嵌套类的成员对封闭类的成员没有特殊访问权。”C++0x FCD说:“嵌套类是成员,因此与任何其他成员具有相同的访问权。”(两者都是§11.8/1)。(这一改变是由CWG缺陷45和494引入的:和)很好-这消除了编写
友元类{
的冲动,这是一些编译器支持的,但并不明显地使嵌套类根本不是成员!@Potato:有趣的是,即使是严格C++03模式下的Comeau也不遵循C++03语言。这让我相信(a)出于某种原因,很可能不可能遵循C++03语言(尽管除了上面链接的DRs中提到的内容之外,我还没有弄清楚确切的原因),并且(b)很可能没有人真正遵循C++03语言:-)。@James:我认为GCC 3.x遵循了这条规则,但我不确定是哪个版本,而且我还没有副本。