如何指定为成员字段对象调用哪个构造函数?

时间:2013-02-18 19:11:08

标签: c++ constructor

如果我有一些类,并且在该类中我有一个自定义的Queue对象,我已经编写了,我的类def看起来像这样:

class Parser
{
    public:
        Parser();
    private:
        Queue<char> Q;
};

并且class Queue有一个默认构造函数以及一个构造函数,它接受一个int参数来指定它的容量,我如何告诉Parser类在它实例化Q字段时它应该触发所需的构造函数一个参数(所以它可以有更大的容量)而不是激发默认构造函数(具有相当小的容量)?我已经看了这个,但我很难找到一个不依赖于继承和父类构造函数的答案。谢谢!

另外,我尝试用Queue<char> Q替换Queue<char> Q(100),但编译器抱怨这个。

3 个答案:

答案 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) { }