c++ - 如何在 C++ 中定义另一个类的私有(private)类

标签 c++

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

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的私有(private)值。例如,myarray[0].a_val = 5;如果是这样,这个语法是否也正确?

最佳答案

不,您定义私有(private)嵌套类的语法没问题。尽管其他一些事情是错误的:您需要在为它创建数组之前定义 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;
}

关于c++ - 如何在 C++ 中定义另一个类的私有(private)类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8995809/

相关文章:

c++ - 如何从内部找到 C++ Linux 程序的完整路径?

c++ - ShellExecute 打开一个特殊文件夹(例如 : "Libraries\Documents") without knowing the special folder name

c++ - 请有人解释为什么这里含糊不清?

c++ - 为什么要在 C 和 C++ 项目中创建包含/目录?

c++ - QList 通过初始化列表初始化

c++ - 如何使用模板函数减去两个对象?

c++ - 如何找到没有效果的作业?

c# - 找不到指定的模块 - 64 位 dll

c++ - C 和 C++ 中的原始内存是什么?

c++ - 如何制作玻璃背景的 window ?