如何获得嵌套类的实例在C++
问题描述:
我有以下代码:如何获得嵌套类的实例在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那样的分配。
这是否意味着最好不要返回公共函数中的私有嵌套类的指针或引用?如果我真的需要将关于嵌套类的内容返回给外部世界,请将它公开吗?
谢谢!
答
如果要在外部类之外使用它,请将结构内部定义放入公共中。
class outer
{
public:
struct inner
{
int var1;
int var2;
inner() { var1 = 1; var2 = 2; }
};
private:
inner inner_instance;
public:
const inner *get_inner() { return &inner_instance; }
};
答
你是对的,如果公共API中使用的类型不是私有的,那么最好。不过,它们可能只是前向声明的(如果你只使用API上的指针或引用)。
+1
私有嵌套类只能由其宿主类使用,对吧? – 2010-03-03 11:00:08
不,如果你想隐藏任何东西使他们私密而不公开。 – 2010-03-03 11:59:20