私はクラスのマトリックスの友人であるクラス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ではないのですか?実際にそれが他と等しく設定されているベクトルであることを私はどのように知ることができますか?
私はあなたが求めているものを本当にわからないんだけど、多分あなたは、ベクターがデフォルトあたりの行列を無効に設定する方法を知りたいです。これに関して、基本クラスのコンストラクタは、派生したクラスコンストラクタの本体の前に呼び出されることに注意してください。 –
*私は、クラスMatrix *のフレンドであるクラスVectorを作成しました。あなたのクラスを初期化するためにあなたのfriendクラスのコンストラクタを呼び出していますか?多分あなたは友情と継承を混乱させているでしょうか? – Holt
いいえ、それは私が求めているものではありません。質問に述べられているように、その部分は完全に理解されています。私が理解していないのは、行の意味です。 Matrix :: operator =(other); は、「this」と「other」の間に明白なリンクがない場合、「* this」(またはベクトル)が「other」に等しく設定されています。 – user6248314