如何做 “自我” 在C(本)分配++?
的Java:
public Point(Point p) {
this(p.x, p.y);
}
会怎么做这在C++?
它只是类似于this->(constructor of point that takes x, constructor of point that takes y);
?
如何做 “自我” 在C(本)分配++?
的Java:
public Point(Point p) {
this(p.x, p.y);
}
会怎么做这在C++?
它只是类似于this->(constructor of point that takes x, constructor of point that takes y);
?
如果您调用同一个类的另一个构造函数,它将创建一个新对象。
如果你想这样做,你应该把构造函数逻辑放在init方法中并从所有构造函数中调用它。
在C++ 0x中,你可以使用委托构造函数:
Point(const Point &p) : Point(p.x, p.y) { }
注意,没有编译器提供了的C++ 0x还全面支持;这个特殊的功能还没有在G ++中实现。
在老版本的C++的,你必须委托给私人建筑功能:
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); }
如果我明白你的这个Java代码(依赖于同一类的另一个构造函数构造函数是什么意思做这项工作):
public Point(Point p) {
this(p.x, p.y);
}
这是我会怎样表达相同的C++:
class Point {
Point(const Point& p)
: Point(p.x, p.y)
{
...
}
};
虽然在这种情况下,它可能不值得这样的麻烦。 – GManNickG
我没有收到有关*较早*版本的评论。它总是使用* init *和类似函数的设计错误。 –
虽然要小心 - 委托构造函数不能在g ++中实现,即使使用--std = C++ 0x。我没有意识到这一段时间一次... – Sean