在C ++中,我试图模仿Java如何处理对它的构造函数的调用。在我的Java代码中,如果我有两个不同的构造函数并希望有一个调用另一个,我只需使用this
关键字。例如:
public Constructor1(String s1, String s2)
{
//fun stuff here
}
public Constructor2(String s1)
{
this("Testing", s1);
}
使用此代码,通过使用Constructor2实例化一个对象(传入单个字符串),它将只调用Constructor1。这在Java中很有用,但我怎样才能在C ++中获得类似的功能?当我使用this
关键字时,它会抱怨并告诉我'this' cannot be used as a function
。
答案 0 :(得分:9)
这可以在带有构造函数委派的C ++ 11中实现:
class Foo {
public:
Foo(std::string s1, std::string s2) {
//fun stuff here
}
Foo(std::string s1) : Foo("Testing", s1) {}
};
答案 1 :(得分:5)
您可以为此类作业编写init
私有成员函数,如下所示:
struct A
{
A(const string & s1,const string & s2)
{
init(s1,s2);
}
A(const string & s)
{
init("Testing", s);
}
private:
void init(const string & s1,const string & s2)
{
//do the initialization
}
};
答案 2 :(得分:3)
你无法在C ++中实现这一点。解决方法是使用默认参数创建单个构造函数。
e.g。
class Foo {
public:
Foo(char x, int y=0); // this line combines the two constructors
...
};
或者,您可以使用包含公共代码的单独方法。然后在两个构造函数中,使用适当的参数调用helper方法。
答案 3 :(得分:1)
答案 4 :(得分:-1)
另一种方式:
Foo(int a){ *this = Foo(a,a); }
Foo(int a, int b): _a(a), _b(b){}
它没有效率,但它与你想要的相似。但是我不建议这个选项,因为我上面的选项更好(在效率方面)。我刚发布这个以显示不同的方式。