演算子のオーバーロードOperator overloading

演算子キーワードが指定する関数を宣言演算子記号クラスのインスタンスに適用されるときのことを意味します。The operator keyword declares a function specifying what operator-symbol means when applied to instances of a class. これによって、演算子に複数の意味を与えます (つまり、"オーバーロード" します)。This gives the operator more than one meaning, or "overloads" it. コンパイラは、オペランドの型を検査することにより、演算子の異なる意味を区別します。The compiler distinguishes between the different meanings of an operator by examining the types of its operands.

構文Syntax

type operator operator-symbol ( parameter-list )type operator operator-symbol ( parameter-list )

RemarksRemarks

ほとんどの組み込み演算子の関数をグローバルに、またはクラス単位で定義し直すことができます。You can redefine the function of most built-in operators globally or on a class-by-class basis. オーバーロードされた演算子は、関数として実装されます。Overloaded operators are implemented as functions.

オーバー ロードされた演算子の名前は演算子 xここで、 x演算子は、次の表に表示されます。The name of an overloaded operator is operator x, where x is the operator as it appears in the following table. という名前の関数を定義する加算演算子をオーバー ロードには、たとえば、 operator + します。For example, to overload the addition operator, you define a function called operator+. 同様に、加算/代入演算子をオーバー ロードする += 、呼び出される関数を定義演算子 + = します。Similarly, to overload the addition/assignment operator, +=, define a function called operator+=.

再定義可能な演算子Redefinable Operators

演算子Operator 名前Name Type
, コンマComma 2 項Binary
!! 論理 NOTLogical NOT 単項Unary
!=!= 非等値Inequality 2 項Binary
% 剰余Modulus 2 項Binary
%= 剰余代入Modulus assignment 2 項Binary
& ビットごとの ANDBitwise AND 2 項Binary
& アドレス取得Address-of 単項Unary
&& 論理 ANDLogical AND 2 項Binary
&= ビットごとの AND 代入Bitwise AND assignment 2 項Binary
( )( ) 関数呼び出しFunction call
( )( ) キャスト演算子Cast Operator 単項Unary
** 乗算Multiplication 2 項Binary
** ポインター逆参照Pointer dereference 単項Unary
*=*= 乗算代入Multiplication assignment 2 項Binary
+ 加算Addition 2 項Binary
+ 単項プラスUnary Plus 単項Unary
++ インクリメント1Increment 1 単項Unary
+= 加算代入Addition assignment 2 項Binary
- 減算Subtraction 2 項Binary
- 単項マイナス符号Unary negation 単項Unary
-- デクリメント1Decrement 1 単項Unary
-= 減算代入Subtraction assignment 2 項Binary
-> メンバー選択Member selection 2 項Binary
->*->* メンバーへのポインター選択Pointer-to-member selection 2 項Binary
/ 除算記号Division 2 項Binary
/= 除算代入Division assignment 2 項Binary
< より小さいLess than 2 項Binary
<< 左シフトLeft shift 2 項Binary
<<= 左シフト代入Left shift assignment 2 項Binary
<= 次の値以下Less than or equal to 2 項Binary
= 代入Assignment 2 項Binary
== 等価比較Equality 2 項Binary
> 次の値より大きいGreater than 2 項Binary
>= 次の値以上Greater than or equal to 2 項Binary
>> 右シフトRight shift 2 項Binary
>>= 右シフト代入Right shift assignment 2 項Binary
[ ][ ] 配列添字Array subscript
^ 排他的 ORExclusive OR 2 項Binary
^= 排他的 OR 代入Exclusive OR assignment 2 項Binary
|| ビットごとの包括的 ORBitwise inclusive OR 2 項Binary
|=|= ビットごとの包括的 OR 代入Bitwise inclusive OR assignment 2 項Binary
|||| 論理 ORLogical OR 2 項Binary
~ 1 の補数One's complement 単項Unary
deletedelete 削除Delete
newnew 新規作成New
変換演算子conversion operators 変換演算子conversion operators 単項Unary

1 2 つのバージョンの単項インクリメントおよびデクリメント演算子: 前置インクリメントと後置インクリメント。1 Two versions of the unary increment and decrement operators exist: preincrement and postincrement.

参照してください演算子のオーバー ロードに関する一般的な規則詳細についてはします。See General Rules for Operator Overloading for more information. さまざまなカテゴリのオーバーロードされた演算子に対する制約については、次のトピックを参照してください。The constraints on the various categories of overloaded operators are described in the following topics:

次のテーブルに示す演算子は、オーバーロードできません。The operators shown in the following table cannot be overloaded. テーブルには、プリプロセッサ シンボルが含まれています。 ### します。The table includes the preprocessor symbols # and ##.

再定義不可演算子Nonredefinable Operators

演算子Operator 名前Name
.. メンバー選択Member selection
.*.* メンバーへのポインター選択Pointer-to-member selection
:::: スコープ解決Scope resolution
? :? : 条件Conditional
# プリプロセッサによる文字列への変換Preprocessor convert to string
## プリプロセッサによる連結Preprocessor concatenate

オーバーロードされた演算子は通常、コードに出現すると、コンパイラによって暗黙的に呼び出されますが、メンバーまたは非メンバー関数を呼び出すのと同じ方法で明示的に呼び出すことができます。Although overloaded operators are usually called implicitly by the compiler when they are encountered in code, they can be invoked explicitly the same way as any member or nonmember function is called:

Point pt;
pt.operator+( 3 );  // Call addition operator to add 3 to pt.

Example

次の例のオーバー ロード、 + 演算子を 2 つの複素数の数値し、結果を返します。The following example overloads the + operator to add two complex numbers and returns the result.

// operator_overloading.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

struct Complex {
   Complex( double r, double i ) : re(r), im(i) {}
   Complex operator+( Complex &other );
   void Display( ) {   cout << re << ", " << im << endl; }
private:
   double re, im;
};

// Operator overloaded using a member function
Complex Complex::operator+( Complex &other ) {
   return Complex( re + other.re, im + other.im );
}

int main() {
   Complex a = Complex( 1.2, 3.4 );
   Complex b = Complex( 5.6, 7.8 );
   Complex c = Complex( 0.0, 0.0 );

   c = a + b;
   c.Display();
}
6.8, 11.2

このセクションの内容In this section

関連項目See also

C++ の組み込み演算子、優先順位と結合規則C++ Built-in Operators, Precedence and Associativity
キーワードKeywords