繁体   English   中英

为什么我可以从子类调用私有函数

[英]Why can I call private functions from a sub class

我把一个班级放到另一个班级。 我将最高级别的类的参考放入较低级别的类(不确定是否有此命名法.. 不是孩子/父母..?子类?)。 我很惊讶地看到我可以从那个子类调用私有函数。 为什么这是可能的?

简单示例:我很惊讶 Bar 可以从 Foo 调用私有函数

// Example program
#include <iostream>
#include <string>

class Foo {
    public:
        class Bar {
            public:
                Bar(Foo &foo);
                void DoFoo();
            private:
                Foo &foo;
        };

        Foo();
    private:
        void Do();
};

Foo::Foo(){}
void Foo::Do(){
    std::cout << "im doing foo";   
}
Foo::Bar::Bar(Foo &foo)
:foo(foo)
{

};
void Foo::Bar::DoFoo(){
    this->foo.Do();
}

int main()
{
    Foo foo;
    Foo::Bar bar(foo);
    bar.DoFoo();
}

实际上访问限制在这里并不重要,因为(来自cppreference ,强调我的)......

一个类的所有成员(成员函数体、成员对象的初始值设定项和整个嵌套类定义)都可以访问该类可以访问的所有名称

在您的示例中, Bar是一个嵌套类,可以访问Foo所有成员(与它们是否被声明为private无关)。

PS请注意,这并不意味着Foo也可以访问Bar所有成员。 例如Bar::foo仅在Bar可见,因为它被声明为private

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM