У меня есть следующий код:
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;
}
Я понимаю, почему No.2 не может быть скомпилирован. Я просто не знаю, какова идея проекта компилятора, который обеспечивает доступ к открытым полям частного вложенного класса, но не сам вложенный класс, как № 1 Данные экземпляра все еще находятся в памяти. Если я знаю структуру такого частного вложенного класса, я все равно могу добиться назначения, как это делает № 3.
Значит ли это, что лучше не возвращать указатель или ссылку на частный вложенный класс в публичной функции? И если мне действительно нужно вернуть что-то о вложенном классе во внешний мир, сделать его публичным?
Спасибо!