我有以下代碼:如何獲得嵌套類的實例在C++
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;
}
我明白了爲什麼2號不能編譯。我只是不知道編譯器的設計思路是什麼,它允許訪問私有嵌套類的公共字段,但不能訪問嵌套類本身,如No.1。實例數據仍在內存中。如果我知道這樣的私有嵌套類的結構,我仍然可以實現像No.3那樣的分配。
這是否意味着最好不要返回公共函數中的私有嵌套類的指針或引用?如果我真的需要將關於嵌套類的內容返回給外部世界,請將它公開嗎?
謝謝!
不,如果你想隱藏任何東西使他們私密而不公開。 – 2010-03-03 11:59:20