-2

+ 演算子で遊んでいるだけで、それを宣言して「明示的に」使用する方法がわかりません。以下のコードを助けてください。

class compex{

    int real;
    int img;

public:
    compex();
    compex(int,int);
    compex& explicit operator + (const compex& P1)
    friend ostream& operator <<(ostream& out,const compex& R);
};

演算子の実装は次のとおりです。

  compex& compex :: operator + (const compex& P1)
 {
    this->real += P1.real;
   this->img += P1.img;
   return *this;
 }
4

4 に答える 4

2

(これらの) 演算子を作成することはできません ( explicitC++11 で明示的に作成できるのは変換演算子のみです)。そして、あなたはする必要はありません。次の方法で、型への明示的な変換を避けるだけです。

  • 他の型の変換演算子を定義していない、および..
  • 1 つのパラメーターで呼び出すことができる complex のすべてのコンストラクターをマークしますexplicit

そうすれば、operator+すでにcomplex.

于 2013-03-11T17:38:11.110 に答える
1

explicit キーワードは、1 つのパラメーターを持つコンストラクターでのみ役立ちます。コンパイラがそのコンストラクターを変換に使用するのを停止します。+ 演算子を明示的にすることで何を達成しようとしているのかわかりません。:)

于 2013-03-11T17:34:46.590 に答える
0

compexを使用するときに型が暗黙的に変換されないようにする場合operator +は、テンプレートパラメータを利用できます。

テンプレートパラメータは、型変換ルールの直接の対象ではありません。

class compex{
    template<class C, 
             typename std::enable_if<std::is_same<C,complex>::value>::type >  
    compex& operator + (const C& P1)
    {
       // Your code
    }
};
于 2013-03-11T17:53:18.353 に答える
0

変換関数が必要な場合explicitは、その目的のためだけに関数を作成する必要があります (ここを参照) (ただし、1 つのパラメーターでのみ機能します)。

あなたについてはoperator+(...)、削除するだけで機能explicitするはずです。

Compex c1(1,2);
Compex c2(3,12);
Compex c3 = c1 + c2;
于 2013-03-11T17:43:26.850 に答える