共用方式為


多載運算子

從 Managed Extensions for C++ 升級為 Visual C++ 2010 之後,運算子多載已明顯改變。

例如,在參考型別宣告中,您不是使用原生 operator+ 語法,而是要明確寫出運算子的基礎內部名稱,在此例中為 op_Addition。 此外,運算子的引動過程,必須透過該名稱明確叫用,因而抹煞了運算子多載的兩項主要優點:(a) 容易暸解的語法 (b) 將新型別與現有型別混合的能力。 例如:

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 )
      ;
}

請參閱

概念

在類別或介面中的成員宣告