したがって、次の演算子のオーバーロードを持つ、作成した汎用 Matrix クラスがあります。
class Matrix
{
public:
Matrix() {}
Matrix(int i, int j, int k) {}
Matrix operator*(const Matrix &right)
{
}
};
Matrix クラスから継承する Matrix2 クラスもあります。
class Matrix2 : public Matrix
{
};
2 つの Matrix2 オブジェクトを乗算しようとすると、次のようなコンパイラ エラーが発生します。
「Matrix2 型の左側のオペランドを取る演算子が見つかりません (またはアクセス可能な変換がありません)」
これはなぜですか? また、継承を使用して演算子のオーバーロードを適切に実装するにはどうすればよいですか?
編集:
指摘したように、私の問題は部分的に「最も厄介な解析」が原因でした。今、私の問題は、演算子のオーバーロードと継承に厳密に関係していると思います。
2 つの Matrix オブジェクトを正常に乗算できますが、2 つの Matrix2 オブジェクトを乗算することはできません。
Matrix2 i;
Matrix2 m;
Matrix result = m * i;
エラーメッセージ:
error C2678: binary '*' : no operator found which takes a left-hand operand of type 'Matrix2' (or there is no acceptable conversion).