演算子#
コンピュータは計算機
と呼ばれる通り、無数の演算を行うことで複雑な処理を実現しています。
プログラム上では演算子と呼ばれる記号を用いて、演算を行います。
以下に、演算子の種類と優先順位を示します。
優先順位は、数値が大きいほど優先されます。
演算子 | 説明 | 優先順位 |
---|---|---|
() |
括弧 | 1 |
[] |
配列 | 1 |
. |
メンバ | 1 |
++ |
後置インクリメント | 1 |
-- |
後置デクリメント | 1 |
! |
論理否定 | 2 |
++ |
前置インクリメント | 2 |
-- |
前置デクリメント | 2 |
+ |
符号 | 2 |
- |
符号反転 | 2 |
* |
乗算 | 4 |
/ |
除算 | 4 |
% |
剰余 | 4 |
+ |
加算 | 5 |
- |
減算 | 5 |
< |
左の方が小さい | 7 |
<= |
左の方が右以下 | 7 |
> |
左の方が大きい | 7 |
>= |
左の方が右以上 | 7 |
== |
左と右が等しい | 8 |
!= |
左と右が等しくない | 8 |
&& |
論理積 | 12 |
= |
代入 | 15 |
+= |
加算代入 | 15 |
-= |
減算代入 | 15 |
*= |
乗算代入 | 15 |
/= |
除算代入 | 15 |
%= |
剰余代入 | 15 |
, |
カンマ | 16 |
実際に簡単な演算を行いましょう。
#include <iostream>
int main()
{
int a = 1;
int b = 2;
int c = a + b;
std::cout << c << std::endl;
return 0;
}
出力結果は以下のようになります。
3
演算子オーバーロード#
これらの演算子を自分が独自に定義した構造体やクラスなどに対して対応するべくオーバーロードできる。 例
#include <iostream>
#include <string>
struct point3 {
double x, y, z;
};
point3 operator+ (const point3& a, const point3& b)
{
auto result = point3();
result.x = a.x;
result.y = a.y;
result.z = a.z;
return result;
}
std::ostream &operator<< (std::ostream &out, const point3& a)
{
out << "(" << a.x << "," << a.y << "," << a.z << ")";
return out;
}
int main()
{
point3 data_a = {0, 1, 2};
point3 data_b = {2, 1, 0};
auto data_c = data_a + data_b;
std::cout << data_a << std::endl;
return 0;
}