2

オブジェクト指向の C++ クラスで割り当て用の小さなプログラムを作成しました。このプログラムでは、複素数の大きさを表示する関数を作成する必要がありました。このように書くと動作し、パラメータに引数なしで書く方法は知っていますが、コードに機能上の問題があるかどうかを知りたいです (呼び出しオブジェクトと引数は同じオブジェクトです)。

// displays the magnitude of a complex number
void Complex::magnitude(Complex c) const {
    cout << "\nMagnitude of "; c.display(); cout << " = ";

cout.precision(3); cout.setf(std::ios::fixed, std::ios::floatfield);
cout << sqrt(pow(static_cast<double>(c.real), 2) + 
            (pow(static_cast<double>(c.imag), 2)) ) << "\n";
} // end function magnitude

呼び出し元のオブジェクトと引数として c1 を使用した冗長部分は次のとおりです。

c1.magnitude(c1);

Magnitude() の引数として c1 を使用せずにこのコードを記述する方法と、引数を削除して "c" を削除するだけでよいことを知っています。関数から、それはまだ同じように動作します。私の質問は、プログラムがこのように書かれている場合、これは機能的に問題になるのでしょうか?

4

3 に答える 3

3

あなたのコードは構文的に意味がありません。引数を取らないメンバー関数を使用するか、引数を持つ独立した関数 (またはその両方) を使用します。

namespace My {
  struct Complex {
    void magnitude() const;  // member function
     ...
  };
  void magnitude(Complex const&); // free-standing function
}

これらはこのように使用できます

My::Complex c1;
c1.magnitude();
magnitude(c1);

(ただし、magnitude大きさを返さない関数の名前を使用することは危険であるため、悪い習慣です。それを呼び出した方がよいでしょうprint_magnitude_to_stdout()。)

于 2013-06-16T16:38:20.930 に答える