如何在C ++中获取嵌套类的实例

时间:2010-03-03 10:52:37

标签: c++ nested private

我有以下代码:

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无法编译。我只是不知道编译器的设计思想是什么,它允许访问私有嵌套类的公共字段,而不是嵌套类本身,如No.1。实例数据仍在内存中。如果我知道这种私有嵌套类的结构,我仍然可以实现像No.3那样的分配。

这是否意味着最好不要在公共函数中返回私有嵌套类的指针或引用?如果我真的必须将嵌套类的某些内容返回给外部世界,那么将其公之于众吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

如果要在外部类之外使用它,请将struct inner定义放在public中。

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; }
};

答案 1 :(得分:0)

您是对的,最好是公共API中使用的类型不是私有的。但它们可能只是向前声明(如果你只在API上使用指针或引用)。