C++における単項演算子「+」のオーバーロード入門
C++では、operatorキーワードを使って関数を宣言することで、クラスのインスタンスに対して演算子が適用されたときの動作を定義できます。これにより、一つの演算子に複数の意味を持たせることができ、これを「オーバーロード(多重定義)」と呼びます。コンパイラは、オペランド(被演算子)の型を調べることで、演算子のどの意味で解釈すべきかを判別します。
単項演算子とは
単項演算子は、単一のオペランドに対して作用する演算子です。代表的な単項演算子には以下のようなものがあります。
- インクリメント(
++)およびデクリメント(--) 演算子 - 単項マイナス(
-)演算子 - 論理NOT(
!)演算子
単項演算子は、呼び出し対象となるオブジェクトそのものに作用します。通常、これらの演算子は+obj、!obj、-obj、++objのようにオブジェクトの左側(前置き)に記述されますが、obj++やobj--のように後置きとして使われる場合もあります。
単項プラス(+)演算子のオーバーロード例
以下のサンプルコードは、前置き形式で使用する単項プラス(+)演算子をオーバーロードする方法を示したものです。この例では、Distanceクラスに対して+演算子を適用すると、インチの値が1つ増加し、11インチを超えた場合はフィートが繰り上がるように実装しています。
サンプルコード
#include <iostream>
using namespace std;
class Distance {
private:
int feet; // フィート(0以上)
int inches; // インチ(0〜12)
public:
// コンストラクタ
Distance(int f, int i) {
feet = f;
inches = i;
}
// 距離を表示するメソッド
void display() {
cout << "F: " << feet << " I:" << inches <<endl;
}
// 単項プラス(+)演算子のオーバーロード
Distance operator+() {
if(inches == 11) {
inches = 0;
feet = feet + 1;
} else {
inches = inches + 1;
}
return Distance(feet, inches);
}
};
int main() {
Distance D1(3, 4), D2(1, 11);
+D1;
D1.display();
+D2;
D2.display();
return 0;
}
実行結果
このプログラムを実行すると、次の出力が得られます。
F: 3 I:5 F: 2 I:0
D1(3, 4)に対して+演算子を適用すると、インチが4から5に増加します。一方、D2(1, 11)の場合は、インチが11だったため0に戻り、フィートが1から2へ繰り上がっていることがわかります。このように、単項演算子をオーバーロードすることで、クラス独自の自然な操作を実現できます。
-
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++で利用できる主な関係演算子は以下の通りです。演算子説明>より大きい(左辺が右辺より大きいか)>=以上(左辺が右辺以上か)<より小さい(左辺が右辺より小さいか)<=以下(左辺が右辺以下か)==等しい(左右の値が等しいか)!=等しくない(左右の値が異なるか)関係演算子の使い方これら