2016-05-03 9 views
1

私はクラスのマトリックスの友人であるクラスVectorを作成しました。私は今、マトリックスが次元Mx1を持たない場合、ベクトルを無効な行列に設定する変換コンストラクタを作成しようとしています。運動の解答で、彼らはこのようにすることをお勧めしました:継承:友人クラスからオペレータのオーバーロードを再利用

Vector::Vector(const Matrix & other): Matrix() { 
    if (other.isValid() && other.getColumns() == 1) 
     Matrix::operator=(other); // reuse matrix' operator= 

} 

最後の行を除くすべては基本的にわかります。 Matrix()コンストラクタは、任意の行列を無効な行列に設定します。開始するには、 "this"またはベクトルが無効に設定されています。しかし、引数が有効でMx1の場合、ベクトルは有効なotherに設定されます。しかし、最後の行では、なぜ* this = statementではないのですか?実際にそれが他と等しく設定されているベクトルであることを私はどのように知ることができますか?

+0

私はあなたが求めているものを本当にわからないんだけど、多分あなたは、ベクターがデフォルトあたりの行列を無効に設定する方法を知りたいです。これに関して、基本クラスのコンストラクタは、派生したクラスコンストラクタの本体の前に呼び出されることに注意してください。 –

+0

*私は、クラスMatrix *のフレンドであるクラスVectorを作成しました。あなたのクラスを初期化するためにあなたのfriendクラスのコンストラクタを呼び出していますか?多分あなたは友情と継承を混乱させているでしょうか? – Holt

+0

いいえ、それは私が求めているものではありません。質問に述べられているように、その部分は完全に理解されています。私が理解していないのは、行の意味です。 Matrix :: operator =(other); は、「this」と「other」の間に明白なリンクがない場合、「* this」(またはベクトル)が「other」に等しく設定されています。 – user6248314

答えて

2

VectorMatrixから継承し、Matrix::operator=(other);Matrixから継承した代入演算子を呼び出します。 (operator=(other)に相当)
(友情はこれとは何の関係もありません。)

*this = otherは、おそらくこのような状況では動作しませんVectorの代入演算子を呼び出します。

関連する問題