C++ this in constructor?
Possible Duplicate:
c++ call constructor from constructor
如何在C++中完成"自我"(指派)任务?
爪哇:
如何在C++中做到这一点呢?
只有EDOCX1[0]会类似吗?
在C++0x中,可以使用委托构造函数:
注意,没有编译器完全支持C++0x;这个特殊的功能还没有在G++中实现。
在C++的较旧版本中,您必须委托给一个私有构造函数:
1 2 3 4 5
| private:
void init (int x, int y ) { ... }
public:
Point(const Point &p ) { init (p. x, p. y); }
Point(int x, int y ) { init (x, y ); } |
- 但在这种情况下,可能不值得麻烦。
- 我没有得到关于旧版本的评论。使用init和类似的函数总是一个设计错误。
- 尽管要小心——委托构造函数不是在G++中实现的,甚至是用STD= C++0X实现的。
- Gene,C++0x允许您直接委托给不同的构造函数。这是一个新特性;第一个代码示例不会编译在不支持C++ 0x的编译器上。
- @bdonlan——我知道委托构造函数,我是说使用init类型的函数总是一个糟糕的设计。在pre-c++0x中,可以编写一个非委托构造函数,比如Point(const Point& p) : x(p.x), y(p.y) {},即使它意味着更多的输入。
- @对于普通的构造器,这是可行的,但是如果您在构造器中做了一些过于复杂的事情,那么将它分解成一个公共函数可能是合理的。那就要看情况了。
- @bdonlan——虽然我不能声称这是从来没有必要的,但我记不起这样一个情况:在这种情况下,它是如此需要,以至于违背了良好的设计实践。毕竟,您可以通过另一个对象创建和交换来实现相同的效果,这是一种不受污染的设计。
- @吉恩,既然你在你的构造中,就不能保证你处于交换是安全的状态。
- @bdonlan——不比调用任何其他函数更不安全,例如init
- @Gene,事实上,我的观点是init处理一个前提(类未初始化),而对于init处理一个具有同样简单前提(两个对象都已初始化)的swap。如果要将部分初始化的结构传递给swap,那么swap必须处理部分初始化的结构以及完全初始化的结构。您还将完全初始化数据成员和超类两次。
如果我理解这个Java代码的含义(依赖于同一个类的另一个构造函数来完成任务的构造函数):
这就是我如何在C++中表达同样的内容:
如果调用同一类的另一个构造函数,它将创建一个新对象。
如果要这样做,应该将构造函数逻辑放入in it方法中,并从所有构造函数调用它。