Jest to kod:dostęp do prywatnych danych należących klasy zewnętrznej w wewnętrzną klasy
#include <iostream>
class Outer{
int a; // private data member of class Outer
public:
Outer(): a(55){}
class Inner{
public:
void fun(Outer ob){
std::cout << ob.a << std::endl;
}
};
};
int main() {
Outer::Inner object;
object.fun(Outer()); // prints 55
//std::cout << (Outer().a) << std::endl; error: 'int Outer::a' is private
return 0;
}
Dlaczego klasa wewnętrzna ma dostęp do prywatnych danych Państwa „a” klasy kosmicznej? Po tym artykule XL C/C++ V8.0 for Linux, nie powinien on się kompilować, jednak kompiluje się na g ++ 4.4.0.
Nie, ten artykuł mówi również, że wewnętrzna klasa nie ma dostępu do otaczającej klasy. Ale masz rację, że jest całkowicie poprawny. – hvd
@hvd: Myślę, że masz rację, zredagowano. Musiałem ponownie przeczytać to kilka razy, ponieważ wydaje się nieco pomieszane. –
W rzeczywistości jest to całkowicie poprawne, ale (prawdopodobnie, gdy IBM napisał swoją dokumentację i kompilator) nie było pierwotnie ważne: zostało poprawne na http://www.open-std.org/JTC1/SC22/WG21/docs /cwg_defects.html#45 – hvd