0

私は、C++ 言語とプログラミング全体にかなり慣れていません。別のクラスのオブジェクトである引数を含むコンストラクターの作成に関して質問があります。

オブジェクトのコンストラクターの例:

Point::Point(int x, int y)
{
    //initiating the values of x and y...
}

次に、以前からオブジェクトの引数を必要とするコンストラクターを作成しようとすると、これが思いつきました。

Line::Line(Point pt1, Point pt2):Point(x, y)
{
    //initiating the values of the class...
}

これにより、「ポイント」が「ライン」の直接のベースではないというエラーが表示されます。Line は Point の派生クラスではないので、何を言おうとしているのかわかります。しかし、別のクラスのオブジェクトである引数を必要とするコンストラクターを作成するにはどうすればよいでしょうか?

どんな助けでも大歓迎です。

よろしく、yxt。

編集: 一部の要求に応じて、Line のコンストラクターを次に示します。

Line::Line(Point newPt1, Point newPt2)
{
    pt1 = newPt1;
    pt2 = newPt2;
}

EDIT2:私は問題を解決することができました。@ user1158692 、@ Brian Gradin 、および @Tristan Brindle の精巧な例と説明に感謝します。

4

4 に答える 4

2

特定の引数をとるコンストラクターを定義するとき、それらがどのように提供され、どこから来たかは気にしません (まあ、そうでintないような単純なものの場合)。例として

Point::Point( int x, int y )

呼び出し元が別のオブジェクトに含まれる値を使用するかどうかは、それらを取得して提供するかどうかにかかっていますが、これはコンストラクターの記述方法にはまったく関係ありません。したがって、彼は上記のコンストラクターを次のように呼び出します。

Point apoint( 1, 2 );
// or:
Point apoint( anObj.GetX(), and Obj.GetY() );
// or:
Point apoint ( anObj.GetX(), anOtherObj.Y );

s コンストラクターで使用した構文Lineは、引数をそのクラスのメンバーまたはそのクラスの基本クラス (この場合はおそらくメンバー) に渡すためのものです。Lineポイントクラスに独自のコンストラクターの適切なセットがあると仮定すると、クラスの適切なコンストラクターがいくつかあります。ない場合は、それらを追加してください。

class Line
{
public:
    Line( const Point& p1, const Point& p1 )
    : m_Point1(p1), m_Point2(p2)
    {}

    Line( int x1, int y1, int x2, int y2) 
    : m_Point1(x1, yx), m_Point2(x2, y2)
    {}
private:
    Point m_Point1;
    Point m_Point2;
};

次のように呼び出されます:

Point aPoint, bPoint;
.
.
Line aline( aPoint, bPoint );
Line bline( 1, 1, 2, 2 );
于 2013-11-11T09:00:03.080 に答える
1

Lineあなたのクラスには 2 つのPointメンバーが含まれていると思います。pt1それらがand と呼ばれると仮定するとpt2、コンストラクターの初期化リストでそれらを初期化する必要があります。

Line::Line(Point pt1, Point pt2): pt1(pt1), pt2(pt2)
{

}
于 2013-11-11T08:48:58.280 に答える