I have the following code:
class outer
{
struct inner
{
int var1;
int var2;
inner() { var1 = 1; var2 = 2; }
};
inner inner_instance;
public:
const inner *get_inner() { return &inner_instance; }
};
int main(int argc, char *argv[])
{
// 1
outer outer_instance;
cout << outer_instance.get_inner()->var1 << endl;
// 2
// this cannot be compiled because outer::inner is private
//const outer::inner *inner_ref = outer_instance.get_inner();
//cout << inner_ref->var1;
// 3
const int *inner_var2 = (int *) outer_instance.get_inner();
inner_var2++;
cout << *inner_var2 << endl;
return 0;
}
I understand why No.2 cannot be compiled. I just do not know what is the design idea of the compiler that allows access to the public fields of a private nested class but not the nested class itself, like No.1. The instance data is still in the memory. If I know the structure of such private nested class, I can still achieve assigning like No.3 does.
Does that mean it is better not to return pointer or reference of a private nested class in a public function? And if I really have to return something about the nested class to the outer world, make it public?
Thanks!