C#の演算子関数とは?operatorキーワードによる演算子のオーバーロード入門
演算子関数(operator関数)とは
C#における演算子関数とは、オーバーロードされた演算子のことで、特別な名前を持つ関数です。演算子関数を定義するには、operatorキーワードに続けて、定義したい演算子の記号を記述します。
通常の関数と同じように、オーバーロードされた演算子にも戻り値の型とパラメーターリストが必要です。
例えば、次のように記述します。
public static Box operator+ (Box b1, Box b2) {
}
構文のポイント
- public static:演算子関数は必ず
publicかつstaticとして宣言する必要があります。 - operator+:
operatorキーワードの後に、オーバーロードする演算子の記号(ここでは+)を続けます。 - パラメーター:二項演算子の場合、左辺と右辺の2つのオペランドを受け取ります。
サンプルコード
以下は、C#で演算子関数を作成し、実際に使用する方法を示した完全なサンプルです。+ 演算子をオーバーロードすることで、2つの Box オブジェクトを加算できるようにしています。
using System;
namespace OperatorOvlApplication {
class Box {
private double length; // 箱の長さ
private double breadth; // 箱の幅
private double height; // 箱の高さ
public double getVolume() {
return length * breadth * height;
}
public void setLength(double len) {
length = len;
}
public void setBreadth(double bre) {
breadth = bre;
}
public void setHeight(double hei) {
height = hei;
}
// + 演算子をオーバーロードして、2つの Box オブジェクトを加算する
public static Box operator+(Box b, Box c) {
Box box = new Box();
box.length = b.length + c.length;
box.breadth = b.breadth + c.breadth;
box.height = b.height + c.height;
return box;
}
}
class Tester {
static void Main(string[] args) {
Box Box1 = new Box(); // Box 型の Box1 を宣言
Box Box2 = new Box(); // Box 型の Box2 を宣言
Box Box3 = new Box(); // Box 型の Box3 を宣言
double volume = 0.0; // 箱の体積を格納する変数
// Box1 の寸法を設定
Box1.setLength(6.0);
Box1.setBreadth(7.0);
Box1.setHeight(5.0);
// Box2 の寸法を設定
Box2.setLength(12.0);
Box2.setBreadth(13.0);
Box2.setHeight(10.0);
// Box1 の体積を表示
volume = Box1.getVolume();
Console.WriteLine("Volume of Box1 : {0}", volume);
// Box2 の体積を表示
volume = Box2.getVolume();
Console.WriteLine("Volume of Box2 : {0}", volume);
// 2つのオブジェクトを加算
Box3 = Box1 + Box2;
// Box3 の体積を表示
volume = Box3.getVolume();
Console.WriteLine("Volume of Box3 : {0}", volume);
Console.ReadKey();
}
}
}
実行結果
Volume of Box1 : 210 Volume of Box2 : 1560 Volume of Box3 : 5985
処理の流れの解説
このプログラムは、次のような流れで動作します。
- Box1 には「長さ6.0 × 幅7.0 × 高さ5.0」の寸法が設定され、体積は 210 になります。
- Box2 には「長さ12.0 × 幅13.0 × 高さ10.0」の寸法が設定され、体積は 1560 になります。
Box3 = Box1 + Box2;の行で、オーバーロードされたoperator+が呼び出され、各寸法を加算した新しい Box オブジェクトが生成されます。- その結果、Box3 は「長さ18.0 × 幅20.0 × 高さ15.0」となり、体積は 5985 になります。
まとめ
演算子関数を活用することで、自作クラスに対しても直感的な演算子の振る舞いを定義できます。これにより、オブジェクト同士の操作を自然な形で表現でき、コード全体の可読性と保守性が大きく向上します。
-
C#のクラスとは?基本構文からサンプルコードまで徹底解説
C#におけるクラスとは、データ型の「設計図(ブループリント)」に相当するものです。クラスをもとに生成された実体をオブジェクトと呼び、オブジェクトはクラスのインスタンスであるといえます。また、クラスを構成するメソッドや変数は、まとめてクラスのメンバーと呼ばれます。クラスの一般的な定義形式C#でクラスを定義する際の一般的な書式は以下のとおりです。<アクセス修飾子> class クラス名 { // メンバー変数 <アクセス修飾子> <データ型> 変数1; &
-
Pythonの演算子関数とは?operatorモジュールの基本と使い方
Pythonには、算術演算・論理演算・比較演算・ビット演算といった数学的な操作を行うための標準ライブラリ関数が用意されています。これらの関数はすべてoperatorモジュールにまとめられています。 operatorモジュールを利用するには、まず標準ライブラリからインポートする必要があります。 import operator この記事では、operatorモジュールが提供する演算子関数のうち、特に使用頻度の高い「算術演算」と「比較(関係)演算」の関数を、サンプルコードと実行結果あわせて解説します。 算術演算の関数 まずは、四則演算など基本的な計算を行う関数から見ていきましょう。主な関数は以下