4

在 C++ 中,我试图模拟 Java 如何处理对其构造函数的调用。在我的 Java 代码中,如果我有 2 个不同的构造函数并且想要一个调用另一个,我只需使用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

4

5 回答 5

9

这将在 C++11 中通过构造函数委托实现:

class Foo {
public:
    Foo(std::string s1, std::string s2) {
        //fun stuff here
    }

    Foo(std::string s1) : Foo("Testing", s1) {}
};
于 2011-07-13T15:55:03.617 回答
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
   }

};
于 2011-07-13T15:39:16.193 回答
3

您无法在 C++ 中实现这一点。解决方法是使用默认参数创建一个构造函数。

例如

class Foo {
    public:
       Foo(char x, int y=0);  // this line combines the two constructors
       ...
 }; 

或者,您可以使用包含公共代码的单独方法。然后在您的两个构造函数中,使用适当的参数调用辅助方法。

于 2011-07-13T15:38:48.050 回答
1

你在找什么叫做构造函数重载

于 2011-07-13T15:38:11.300 回答
-1

其他方式:

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

它效率不高,但与您想要的相似。但是我不建议这个选项,因为我上面的选项更好(在效率方面)。我只是发布了这个来展示一种不同的方式。

于 2011-07-13T15:50:05.647 回答