ホームページ > バックエンド開発 > C++ > 私の行列クラスの ` はなぜ

私の行列クラスの ` はなぜ

Patricia Arquette
リリース: 2024-12-18 08:43:14
オリジナル
932 人が閲覧しました

Why Does My Matrix Class's `

<< のあいまいなオーバーロードostream の演算子

<< をオーバーロードしようとしたときにエラーが発生しました。 Matrix クラスの演算子は、演算子関数が引数を 1 つだけ取らなければならないという要件から生じています。この場合、エラーは次のコードが原因である可能性があります:

std::ostream&amp; Matrix::operator <<(std::ostream&amp; stream, const Matrix&amp; matrix) {

    [...]

}
ログイン後にコピー

演算子<<関数は Matrix クラスのメンバー関数として定義されているため、暗黙的に Matrix オブジェクトを引数として受け取ります。その結果、関数は実際には ostream オブジェクトと Matrix オブジェクトという 2 つの引数を取ります。

この問題を解決するには、2 つのオプションがあります:

  1. フレンド関数を使用する: フレンド関数はクラスのメンバーではありませんが、そのプライベートおよび保護されたメンバーにアクセスできます。演算子<<を定義することにより、関数をフレンド関数として使用すると、暗黙的な Matrix オブジェクトの引数を避けることができます。

    friend std::ostream&amp; operator<< (std::ostream&amp; stream, const Matrix&amp; matrix) {
        [...]
    }
    ログイン後にコピー
  2. Matrix オブジェクトを参照として渡す: Matrix オブジェクトを次のように渡します。参照の場合、暗黙的な Matrix オブジェクトを回避できます引数。

    std::ostream&amp; operator<< (std::ostream&amp; stream, const Matrix&amp; matrix) const {
        [...]
    }
    ログイン後にコピー

2 番目のオプションには演算子 << が必要であることに注意してください。 Matrix オブジェクトを変更しないため、関数は const として宣言される必要があります。

以上が私の行列クラスの ` はなぜの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート