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

use*_*311 8 c++

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

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

    class b
    {
        public:
        b(int a):a_val (a){}
        private:
        int a_val;
    };
};
Run Code Online (Sandbox Code Playgroud)

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

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

pmr*_*pmr 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;
}
Run Code Online (Sandbox Code Playgroud)


Rob*_*ahy 0

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

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