如果我有一些类,并且在该类中我有一个自定义的Queue对象,我已经编写了,我的类def看起来像这样:
class Parser
{
public:
Parser();
private:
Queue<char> Q;
};
并且class Queue
有一个默认构造函数以及一个构造函数,它接受一个int参数来指定它的容量,我如何告诉Parser类在它实例化Q字段时它应该触发所需的构造函数一个参数(所以它可以有更大的容量)而不是激发默认构造函数(具有相当小的容量)?我已经看了这个,但我很难找到一个不依赖于继承和父类构造函数的答案。谢谢!
另外,我尝试用Queue<char> Q
替换Queue<char> Q(100)
,但编译器抱怨这个。
答案 0 :(得分:2)
在Parser的构造函数实现中使用初始化列表...
Parser::Parser()
:Q(10) ///example of initializing to capacity 10
{
}
答案 1 :(得分:1)
它位于member-initialization-list中,您可以在其中选择构造函数:
如果要调用默认构造函数,请执行以下操作:
Parser() : Q() {} //calls the default constructor
由于您没有传递任何参数,因此上述内容与:
相同 Parser() {} //Q is also constructed invoking the default constructor
在进入Parser
构造函数的主体之前,Q
通过调用默认构造函数构造完全。
如果要调用其他构造函数,请执行以下操作:
Parser() : Q(10) {} //calls the other constructor
这就是你想要的。在这种情况下,您通常希望将大小传递给Parser
然后执行此操作:
Parser(int size) : Q(size) {} //calls the other constructor
在C ++ 11中,您可以在声明中执行以下操作:
class Parser
{
//...
Queue<char> Q(10); //C++11 only
};
答案 2 :(得分:1)
像这样:
Parser() : Q(100) { }