次の方法で共有


オーバーロードされた演算子

演算子のオーバーロードは、Visual C++ 2010 では C++ マネージ拡張から大幅に変更されています。

たとえば参照型の宣言では、ネイティブな operator+ 構文を使用するのではなく、演算子の基になる内部名、ここでは op_Addition を明示的に記述します。 また、演算子を呼び出すときに名前によって明示的に呼び出す必要があり、このために (a) 直感的な構文と (b) 既存の型と新しい型の混在という、演算子のオーバーロードによって得られる 2 つの大きな利点を得ることができません。 たとえば、次のように実行します。

public __gc __sealed class Vector {
public:
   Vector( double x, double y, double z );

   static bool    op_Equality( const Vector*, const Vector* );
   static Vector* op_Division( const Vector*, double );
   static Vector* op_Addition( const Vector*, const Vector* );
   static Vector* op_Subtraction( const Vector*, const Vector* );
};

int main()
{
   Vector *pa = new Vector( 0.231, 2.4745, 0.023 );
   Vector *pb = new Vector( 1.475, 4.8916, -1.23 ); 

   Vector *pc1 = Vector::op_Addition( pa, pb );
   Vector *pc2 = Vector::op_Subtraction( pa, pc1 );
   Vector *pc3 = Vector::op_Division( pc1, pc2->x );

   if ( Vector::op_Equality( pc1, pc2 ))
      ;
}

新しい構文では、静的な演算子の宣言と使用の両方で、ネイティブな C++ プログラマが当然のように求める機能が復元されました。 新しい構文に変換された Vector クラスを次に示します。

public ref class Vector sealed {
public:
   Vector( double x, double y, double z );

   static bool    operator ==( const Vector^, const Vector^ );
   static Vector^ operator /( const Vector^, double );
   static Vector^ operator +( const Vector^, const Vector^ );
   static Vector^ operator -( const Vector^, const Vector^ );
};

int main()
{
   Vector^ pa = gcnew Vector( 0.231, 2.4745, 0.023 );
   Vector^ pb = gcnew Vector( 1.475,4.8916,-1.23 );

   Vector^ pc1 = pa + pb;
   Vector^ pc2 = pa - pc1;
   Vector^ pc3 = pc1 / pc2->x;

   if ( pc1 == pc2 )
      ;
}

参照

概念

クラスまたはインターフェイス内でのメンバー宣言