如何在C ++中的另一个类'private中定义一个类

时间:2012-01-24 23:26:02

标签: c++

是否可以在另一个私有类中定义一个类并将其用于数组?例如:

class a
{
    public:
    private:
    class b;
    b myarray[10];

    class b
    {
        public:
        b(int a):a_val (a){}
        private:
        int a_val;
    };
};

忽略公开,我的语法有什么问题吗?

是否也可以在A中创建成员函数来修改b的私有值。例如,myarray [0] .a_val = 5;如果是这样,这种语法也是正确的吗?

4 个答案:

答案 0 :(得分:5)

不,您定义私有嵌套类的语法是正确的。虽然其他一些问题是错误的:您需要在创建数组之前定义b。类型需要完整。

b不是默认构造的,因此您还需要在a构造函数初始化列表中初始化数组,这在C ++ 03中实际上是不可能的。 C ++ 11提供初始化列表以获得该功能。

只需使用std::vectorstd::array

修正了您的代码版本:

class a
{
public:
  // ATTN C++11 feature here
  a() : myarray({ 1, 2}) {}
private:
  class b {
  public:
    b(int a) : a_val (a){}
    int a_val;
  };
  b myarray[2];
};
int main ()
{
  a a;
}

答案 1 :(得分:2)

是的,没关系,但你必须在声明它的数组之前完全定义嵌套类:数组只能由完整的类型组成:

class Outer
{
    class Inner { /* define it! */ };
    Inner a[100];
};

答案 2 :(得分:0)

是的,你可以在其他类中私下声明类。

是的,您可以将它们用作数组的类型,前提是您在创建数组时可以看到类本身。

答案 3 :(得分:0)

不,这完全没问题。它只是意味着你只能在a类中声明b的实例,这将阻止人们这样做:

a::b myB;

宣布他们自己的b,这大概是你想要的。