-2

* 演算子をオーバーロードして、クラスの複雑なサブ変数を乗算し、複雑な結果を返すようにしたいと思います。私の考えは次のとおりでした。

#include <complex>

using namespace std; 

class a{
public:
  std::complex<double> x0;
...
};

template<class T> complex<T>  operator*(const a &lfv, const a &rfv){
  return lfv.x0*rfv.x0;
}

しかし、うまくいきません...アイデアやコメントはありますか?

4

3 に答える 3

1

複雑なクラスはすでにそれを処理しています。つまり、乗算後に常に複雑な結果を返します。

使用方法は次のとおりです。

complex<double> p(10,20);
complex<double> q(2,3);
std::cout << p*q << endl;

出力は次のとおりです。

(-40,70)

または、次のようにできる場合:

class a{
public:
  std::complex<double> x0;
};

complex<double>  operator*(const a &lfv, const a &rfv){
  return lfv.x0*rfv.x0;
}

int main()
{
    a  y;
    y.x0 = complex<double>(10,20);
    a  z;
    z.x0 = complex<double>(10,20);
    std::cout << y*z << endl;
}
于 2013-04-11T15:13:18.517 に答える
0

はタイプを自動的に差し引くことができないため、探していることを実行する方法は考えられません ( complex<T>from を返す)。次の例のように、タイプを指定する必要があります。operator*operator*

a my_var1;
a my_var2;
complex<double> result = operator*<double>(my_var1, my_var2);

...または、@juanchopanza の提案に従い、テンプレートを使用しないこともできますoperator*

于 2013-04-11T14:23:53.313 に答える