如何在另一个类的私有C++中定义一个类
How to define a class within another class' private in C++
是否可以在另一个私有类中定义一个类并将其用于数组?例如:
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::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;
}
是的,这很好,但在声明嵌套类的数组之前,必须完全定义嵌套类:数组只能由完整的类型组成:
class Outer
{
class Inner { /* define it! */ };
Inner a[100];
};
是的,您可以在其他类中私下声明类。
是的,您可以将它们用作数组的类型,前提是在创建数组的位置可以看到类本身。
不,完全可以。这只是意味着你只能在类a中声明b的实例,这将阻止人们这样做:
a::b myB;
声明自己的b,这大概就是你想要的。
相关文章:
- 用C++中的一个变量定义一个常量
- 在类定义之后定义一个私有方法
- 如何定义一个纯抽象基类
- 为什么我不能在主函数之外定义一个类的对象(它继承了另一个类)?
- 如何定义一个没有重复代码的继承的 const 类成员函数?
- 如何在 c++ 中定义一个将被另一个短语替换的短语?
- 是否可以定义一个以向量<T>作为值的unordered_map?
- 我可以定义一个 constexpr 匿名/未命名变量吗?
- 定义一个 void f(void) 函数,但使用来自同一范围的变量?
- 如何在一个函数中定义一个变量,并在另一个函数中访问和更改它?(C++)
- 为什么不建议使用宏符号常量定义一个固定长度的数组呢
- 在C++中,我想通过使用来自变量(例如字符串)的typename信息,从模板中定义一个类对象
- 为什么我必须显式定义一个由固有类提供的方法
- 定义一个带有缓冲区的函数作为卤化物中的边界框参数
- Visual Studio 2017 C++,如何定义一个"环境变量"'Additional Library Directory'?
- 如何键入定义一个专门的 std::set 模板,使用特定的比较函数实例化
- 仅使用 bool 和 char 定义一个 templete 类
- 定义一个工厂函数,该函数返回指向在此工厂函数中创建的函数的指针
- 是否可以定义一个非模板函数,该函数可以将模板化对象作为参数
- 如何在C 中定义一个副操作员