是否可以在另一个私有类中定义一个类并将其用于数组?例如:
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;如果是这样,这种语法也是正确的吗?
答案 0 :(得分:5)
不,您定义私有嵌套类的语法是正确的。虽然其他一些问题是错误的:您需要在创建数组之前定义b
。类型需要完整。
b
不是默认构造的,因此您还需要在a
构造函数初始化列表中初始化数组,这在C ++ 03中实际上是不可能的。 C ++ 11提供初始化列表以获得该功能。
只需使用std::vector
或std::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,这大概是你想要的。