“这个”不能用作函数
在 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
在 C++ 中你无法实现这一点。解决方法是创建一个具有默认参数的构造函数。
例如
,或者,您可以使用包含公共代码的单独方法。然后在两个构造函数中,使用适当的参数调用辅助方法。
You cannot achieve this in C++. The workaround is to create a single constructor with default parameters.
e.g.
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.
您正在寻找的内容称为 构造函数重载
what you are looking for is called Constructor overloading
另一种方式:
它效率不高,但与您想要的类似。但是,我不建议使用此选项,因为我上面的选项更好(就效率而言)。我刚刚发布此内容是为了展示一种不同的方法。
Another way:
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.
这在 C++11 中可以通过构造函数委托实现:
This will be possible in C++11 with constructor delegation:
您可以为此类作业编写一个
init
私有成员函数,如下所示:You can write an
init
private member function for such job, as shown below: