“这个”不能用作功能

时间:2011-07-13 15:35:57

标签: c++ class-constructors

在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

5 个答案:

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

您要找的是Constructor overloading

答案 4 :(得分:-1)

另一种方式:

Foo(int a){ *this = Foo(a,a); }
Foo(int a, int b): _a(a), _b(b){}

它没有效率,但它与你想要的相似。但是我不建议这个选项,因为我上面的选项更好(在效率方面)。我刚发布这个以显示不同的方式。