[英]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.