簡體   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