6

我有这门课

class XXX {
    public:
        XXX(struct yyy);
        XXX(std::string);
    private:
        struct xxx data;
};

第一个构造函数(使用结构)很容易实现。第二个我可以以特定格式分割一个字符串,解析并提取相同的结构。

我的问题是,在java中我可以做这样的事情:

XXX::XXX(std::string str) {

   struct yyy data;
   // do stuff with string and extract data
   this(data);
}

用于this(params)调用另一个构造函数。在这种情况下,我可以做类似的事情吗?

谢谢

4

2 回答 2

9

您正在寻找的术语是“构造函数委托”(或更一般地说,“链式构造函数”)。在 C++11 之前,这些在 C++ 中不存在。但语法就像调用基类构造函数一样:

class Foo {
public:
    Foo(int x) : Foo() {
        /* Specific construction goes here */
    }
    Foo(string x) : Foo() {
        /* Specific construction goes here */
    }
private:
    Foo() { /* Common construction goes here */ }
};

如果你不使用 C++11,你能做的最好的事情就是定义一个私有帮助函数来处理所有构造函数共有的东西(尽管这对于你想放在初始化列表中的东西来说很烦人) . 例如:

class Foo {
public:
    Foo(int x) {
        /* Specific construction goes here */
        ctor_helper();
    }
    Foo(string x) {
        /* Specific construction goes here */
        ctor_helper();
    }
private:
    void ctor_helper() { /* Common "construction" goes here */ }
};
于 2013-01-06T16:09:13.670 回答
2

是的。在 C++11 中,您可以做到这一点。它被称为构造函数委托

struct A
{
   A(int a) { /* code */ }

   A() : A(100)  //delegate to the other constructor
   {
   }
};
于 2013-01-06T16:09:07.147 回答