“这个”不能用作函数

发布于 2024-11-20 00:25:16 字数 432 浏览 2 评论 0原文

在 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'不能用作函数

In C++ I'm attempting to emulate how Java handles calls to it's constructor. In my Java code, if I have 2 different constructors and want to have one call the other, I simply use the this keyword. Example:

public Constructor1(String s1, String s2)
{
    //fun stuff here
}

public Constructor2(String s1)
{
    this("Testing", s1);
}

With this code, by instantiating an object with Constructor2 (passing in a single string) it will then just call Constructor1. This works great in Java but how can I get similar functionality in C++? When I use the this keyword it complains and tells me 'this' cannot be used as a function.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

终陌 2024-11-27 00:25:17

在 C++ 中你无法实现这一点。解决方法是创建一个具有默认参数的构造函数。

例如

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

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

You cannot achieve this in C++. The workaround is to create a single constructor with default parameters.

e.g.

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

Alternatively, you can use a separate method which contains the common code. Then in your two constructors, you call the helper method with the appropriate arguments.

似最初 2024-11-27 00:25:17

您正在寻找的内容称为 构造函数重载

what you are looking for is called Constructor overloading

忆离笙 2024-11-27 00:25:17

另一种方式:

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

它效率不高,但与您想要的类似。但是,我不建议使用此选项,因为我上面的选项更好(就效率而言)。我刚刚发布此内容是为了展示一种不同的方法。

Another way:

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

Its not efficient but its similar to what you want. However I do not suggest this option because the option purposed above me are better(in terms of efficiency). I just posted this to show a different way of doing it.

〗斷ホ乔殘χμё〖 2024-11-27 00:25:16

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

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

    Foo(std::string s1) : Foo("Testing", s1) {}
};

This will be possible in C++11 with constructor delegation:

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

    Foo(std::string s1) : Foo("Testing", s1) {}
};
筑梦 2024-11-27 00:25:16

您可以为此类作业编写一个 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
   }

};

You can write an init private member function for such job, as shown below:

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
   }

};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文