C++ での加算演算子のオーバーロード

Muhammad Adil 2023年12月11日
C++ での加算演算子のオーバーロード

演算子のオーバーロードは、プログラマーが演算子の意味を再定義できる手法です。これは、プログラマーが記号やキーワードに新しい意味を追加することにより、プログラミング言語の構文を拡張できるようにするメカニズムです。

演算子は、単項、2 進数、または 3 進数に分類できます。単項演算子は 1つのオペランドを取り、二項演算子は 2つのオペランドを取り、三項演算子は 3つのオペランドを取ります。

friend 関数、メンバー関数、または通常の関数を使用して、演算子をオーバーロードできます。この記事では、C++ の friend 関数を使用した加算演算子のオーバーロードにのみ焦点を当てます。

friend キーワードは、C++ 言語で使用され、クラスのプライベートデータメンバーにアクセスできるクラスを指定します。friend 関数はクラスメンバーではありませんが、そのクラスのプライベートデータと関数の一部またはすべてにアクセスするためのアクセス許可が与えられていることに注意することが重要です。

フレンドクラスは、他のクラスのヘルパー関数を提供するためによく使用されます。friend 関数は、クラスのメンバーではないため、非メンバー関数と呼ばれることもあります。

C++ では、friend 関数を使用して演算子をオーバーロードする場合は、それを friend として宣言する必要があります。friend 宣言は、この関数が同じクラスの他の関数およびオブジェクトで使用されることをコンパイラーに通知します。

C++ の friend 関数を使用して加算演算子をオーバーロードする

C++ では、オーバーロードされた加算演算子は、同じタイプの 2つのオペランドを取り、それらに対して加算を実行する 2 項演算子です。

次の手順は、friend 関数を使用して C++ で加算演算子をオーバーロードするために使用されます。

  • 派生クラスで operator+() を呼び出すことができるテンプレートクラスを定義します。
  • 派生クラスの加算演算子をオーバーロードする friend 関数を定義します。
  • テンプレートクラスに追加するオーバーロードされた演算子を定義します。
  • 手順 2 で定義した friend 関数によって呼び出される派生クラスで、加算演算のオーバーロードされた演算子を定義します。

コード例:

#include <iostream>
class Demo {
 private:
  int e_demo{};

 public:
  Demo(int demo) : e_demo{demo} {}
  friend Demo operator+(const Demo& x1, const Demo& x2);
  int getDemo() const { return e_demo; }
};
Demo operator+(const Demo& x1, const Demo& x2) {
  return Demo{x1.e_demo + x2.e_demo};
}
int main() {
  Demo demo1{5};
  Demo demo2{5};
  Demo demoSum{demo1 + demo2};
  std::cout << "Total Count is " << demoSum.getDemo();
  return 0;
}

出力:

Total Count is 10

上記のコードのライブデモンストレーションを確認するには、ここをクリックしてください。

著者: Muhammad Adil
Muhammad Adil avatar Muhammad Adil avatar

Muhammad Adil is a seasoned programmer and writer who has experience in various fields. He has been programming for over 5 years and have always loved the thrill of solving complex problems. He has skilled in PHP, Python, C++, Java, JavaScript, Ruby on Rails, AngularJS, ReactJS, HTML5 and CSS3. He enjoys putting his experience and knowledge into words.

Facebook

関連記事 - C++ Operator