2011-08-02 29 views

回答

0

如果您调用同一个类的另一个构造函数,它将创建一个新对象。

如果你想这样做,你应该把构造函数逻辑放在init方法中并从所有构造函数中调用它。

8

在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); } 
+2

虽然在这种情况下,它可能不值得这样的麻烦。 – GManNickG

+1

我没有收到有关*较早*版本的评论。它总是使用* init *和类似函数的设计错误。 –

+1

虽然要小心 - 委托构造函数不能在g ++中实现,即使使用--std = C++ 0x。我没有意识到这一段时间一次... – Sean

2

如果我明白你的这个Java代码(依赖于同一类的另一个构造函数构造函数是什么意思做这项工作):

public Point(Point p) { 
    this(p.x, p.y); 
} 

这是我会怎样表达相同的C++

class Point { 

    Point(const Point& p) 
     : Point(p.x, p.y) 
    { 
     ... 
    } 
};