0

複素数を処理するためのC++プログラムを構築しています。このコードの動作に問題があります:

Complex& Complex::operator=(const Complex& com)
{
    Complex::re_=com.re_;
    Complex::im_=com.im_;
    return *this;
}

現在、この関数の戻り型は複合型の参照です。thisだから私はではなく通過するべきではありません*this

4

2 に答える 2

5

thisポインタは、オブジェクトインスタンスのアドレスです。

アスタリスクを使用して逆参照します。

于 2013-02-14T11:13:49.437 に答える
0

JavaやC#とは異なり、thisC ++では参照ではなく、ポインターです。そのポインタは、メソッドのconst修飾子に応じて、 typeComplex*または。のいずれかになります(つまり、あなたの場合です)。Complex const*Complex*

編集:コメントに記載されているように、JavaとC#の参照は、C ++の参照とpoitnerに簡単に匹敵するものではないので、明確にしておきます。

構文的には、3つの言語すべての参照は同じように扱われます。つまり、逆参照する必要がないか、暗黙的に逆参照されるか、簡単に言えば、のようにその背後にあるオブジェクトにアクセスしますref.method()

意味的には、通常のJavaおよびC#参照はC ++ポインターのように動作します。つまり、nullにすることも、別のオブジェクトを指すように再割り当てすることもできます。C ++では、どちらも参照では不可能です。したがって、一見するとthis、JavaとC#には、C++の場合と同じようにC++ポインタのセマンティクスがあります。ただし、null別のオブジェクトを指すように再割り当てすることはできず、再割り当てすることもできないため、そのセマンティックの違いはなくなり、3つの言語すべてで同じC++参照セマンティクスを持ちます。

つまり、同じ答えです。 参照セマンティクスはありますthis、構文的にはC ++のポインターであるため、(構文)参照を取得するには明示的に逆参照する必要があります。

于 2013-02-14T11:16:29.737 に答える