-9

C++ では、ポイント クラスを使用して三角形クラスを作成しようとしています。Javaでの正しい方法は次のとおりです。

    public class Point {
    double x, y;

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

public class Triangle {
Point p1,p2,p3;

public Triangle(Point p1, Point p2, Point p3){
    this.p1=p1;
    this.p2=p2;
    this.p3=p3;
}
}

主に:

Point p1=new Point(0,0);
Point p2=new Point(1,1);
Point p3=new Point(-1,1);
Triangle t1=new Trianle(p1,p2,p3);

私が持っているC ++で:

class point{
double x1,y1;

public:

       point(double x, double y){
       x1=x;
       y1=y;
       }  

};         

class triangle{
point p1, p2, p3;

public:

       triangle(point varp1, point varp2, point varp3){
       p1=varp1;
       p2=varp2;
       p3=varp3;
       }
};

主に:

    point p1(-1,1);
    point p2(1,1);
    point p3(0,0);
    triangle t1(p1,p2,p3);

どういうわけかこれはうまくいきません、なぜですか?................................................................... ................................................................... ................................................................... ................................................................... ...................................................

4

3 に答える 3

3

コンストラクターはメンバーに割り当てる前にメンバーtriangleをデフォルトで構築しようとしますが、デフォルトのコンストラクターがないため、機能しません。これは、2 つの引数を取るコンストラクターのみを提供するためであり、デフォルトのデフォルト コンストラクターは削除されます。pointpointpoint

代わりに、メンバー初期化リストを使用してポイントを初期化する必要があります。

dreieck(point varp1, point varp2, point varp3)
  : p1(varp1), p2(varp2), p3(varp3)
{ }

これにより、メンバーp1p2、およびp3がそれぞれ引数varp1varp2、およびで初期化されるvarp3ため、デフォルトの構築が回避されます。

于 2013-05-12T14:54:01.180 に答える
1

クラスにデフォルトコンストラクタpointが定義されていない (または自動的に提供されていない)。コンストラクターをオーバーロードしたため、コンパイラによって生成されたコンストラクターは含まれませんでした。クラスでtriangleは、 type の 3 つのオブジェクトをデフォルトで構築していますpoint。利用可能なデフォルト コンストラクターがないため、エラーが発生します。

コンストラクターを明示的に定義する必要があります (そして、member-initializer listを使用してメンバーを初期化する必要があります)。次に例を示します。

class point
{
    public:
        point() : x1(0), y1(0) {}
        ...
};

さらに、パラメータ化されたコンストラクターにオプションの引数を取るようにすると、デフォルト コンストラクターとして機能できます。例えば:

class point
{
    public:
        point(double x = 0, double y = 0) : x1(x), y1(y) {}
        ...
};
于 2013-05-12T14:54:37.727 に答える