如何在另一个类的私有C++中定义一个类

How to define a class within another class' private in C++

本文关键字:定义 一个 另一个 C++      更新时间:2023-10-16

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

class a
{
    public:
    private:
    class b;
    b myarray[10];
    class b
    {
        public:
        b(int a):a_val (a){}
        private:
        int a_val;
    };
};

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

是否也可以在a中创建一个成员函数来修改b的私有值。例如,myarray[0]。a_val=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;
}

是的,这很好,但在声明嵌套类的数组之前,必须完全定义嵌套类:数组只能由完整的类型组成:

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

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

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

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

a::b myB;

声明自己的b,这大概就是你想要的。