C++における演算子オーバーロードの規則まとめ
C++の演算子オーバーロードとは
C++はコンパイル時ポリモーフィズム(静的多態性)をサポートしています。その代表例が「関数のオーバーロード」と「演算子のオーバーロード」です。
演算子のオーバーロードを使うと、ユーザー定義型に対して「+」や「==」などの演算子を自然な形で適用でき、コードの可読性を大きく向上させることができます。ただし、自由に定義できるわけではなく、言語仕様によっていくつかの重要なルールが定められています。
演算子オーバーロードの主なルール
- オーバーロードできるのは既存の演算子のみ:C++に存在しない新しい演算子(例:** などの累乗演算子)を作成してオーバーロードすることはできません。
- アリティ(オペランドの数)は変更不可:単項演算子は単項のまま、二項演算子は二項のまま定義する必要があります。
- 優先順位と結合規則は変わらない:オーバーロードしても、演算子の優先順位は組み込みのものと同じになります。
- デフォルト引数は原則使用不可:関数呼び出し演算子「()」を除き、オーバーロードした演算子にデフォルト引数を設定することはできません。
- 組み込み型だけではオーバーロードできない:int や double などの組み込みデータ型のみを対象とするオーバーロードは禁止されており、少なくとも1つのユーザー定義型(クラスや構造体)が関与している必要があります。
- メンバー関数として定義すべき演算子がある:代入演算子「=」、添字演算子「[]」、関数呼び出し演算子「()」、矢印演算子「->」の4つは、フレンド関数ではなく必ずメンバー関数として定義しなければなりません。
- デフォルトでオーバーロード済みの演算子もある:代入演算子「=」、アドレス演算子「&」、カンマ演算子「,」は、特に定義しなくてもクラスに対してデフォルトの動作が提供されます。
まとめ
演算子オーバーロードは強力な機能ですが、これらの制約を理解した上で使うことが重要です。特に「=」「[]」「()」「->」がメンバー関数限定である点や、組み込み型だけではオーバーロードできない点は、コンパイルエラーの原因になりやすいので注意しましょう。
-
C++のビット演算子(AND・OR・XOR)の使い方を解説
C++で利用できるビット演算子(ビットごとの演算を行う演算子)には主に3種類あります。ビットごとのAND演算子(&)、ビットごとのOR演算子(|)、そしてビットごとの排他的OR演算子であるXOR(^)です。これらの演算子は、データを2進数のビット列として扱い、対応するビット同士を比較することで新しい値を生成します。フラグ管理やマスク処理など、低レベルなプログラミングで頻繁に活用される重要な演算子です。ビットごとのAND演算子(&)AND演算子(&)は、第1オペランドの各ビットを、第2オペランドの対応するビットと比較します。両方のビットが1の場合のみ、結果の対応するビット
-
C++の関係演算子とは?種類と使い方を実例付きで解説
C++プログラミングでは、2つの変数に格納された値を比較し、両者の大小関係や等価性を判定するために関係演算子を使用します。関係演算子は、if文などの条件分岐やfor文・while文などのループ処理において不可欠な要素であり、比較の結果はbool型(true / false)として返されます。C++で利用できる主な関係演算子は以下の通りです。演算子説明>より大きい(左辺が右辺より大きいか)>=以上(左辺が右辺以上か)<より小さい(左辺が右辺より小さいか)<=以下(左辺が右辺以下か)==等しい(左右の値が等しいか)!=等しくない(左右の値が異なるか)関係演算子の使い方これら