C++で「-」演算子のオーバーロードを使って2つの数値を加算する方法
演算子オーバーロードは、C++における重要な概念の一つです。これはポリモーフィズム(多態性)の一種であり、演算子にユーザー定義の意味を持たせるためにオーバーロードする仕組みです。オーバーロードされた演算子は、ユーザー定義のデータ型に対して操作を実行するために使用されます。例えば、「+」演算子をオーバーロードすることで、整数型や文字列型(連結処理)など、さまざまなデータ型に対して加算を行うことができます。
入力と出力
入力
10 20 20 30
出力
30 50
処理の解説
このプログラムでは、「-」演算子をオーバーロードして、2つの数値の加算を実現します。二項演算子は操作を実行するために1つのオブジェクトを引数として必要とします。メンバ関数として定義した場合、呼び出し元のオブジェクトが暗黙的に渡されるため、引数は1つで済みます。一方、フレンド関数を使用する場合は、2つの引数が必要になります。
演算子は「ob1 - ob2」のように呼び出されます。このとき、演算子の前にあるオブジェクト(ob1)が関数を呼び出し、演算子の後ろにあるオブジェクト(ob2)が引数として関数に渡されます。つまり、このケースではob1が呼び出し元のオブジェクトであり、ob2が関数への引数となります。
ここでは、ob1のxとyにそれぞれ10と20を、ob2のxとyにそれぞれ20と30を設定しています。「ob1 - ob2」が実行されると、ob1のxにob2のxが加算され、ob1のyにob2のyが加算されるため、結果として30と50が出力されます。
サンプルコード
#include <iostream>
using namespace std;
class sum {
public:
int x, y, z;
void getdata(int a, int b) {
x=a;
y=b;
}
void display() {
cout<<"\nSum of X:"<<x;
cout<<"\nSum of Y:"<<y;
}
void operator-(sum &);
};
void sum::operator-(sum &ob) {
x=x+ob.x;
y=y+ob.y;
display();
}
int main() {
sum ob1, ob2;
ob1.getdata(10,20);
ob2.getdata(20,30);
ob1-ob2;
}コードのポイント
- getdata関数: オブジェクトのメンバ変数xとyに値を設定します。
- display関数: 加算結果を画面に出力します。
- operator-関数: 「-」演算子をオーバーロードしたメンバ関数で、実際には減算ではなく加算処理を行います。これにより、本来とは異なる独自の意味を演算子に持たせることができます。
このように、演算子オーバーロードを活用することで、直感的な記述ながら独自の処理を実装できるのがC++の強力な特徴です。ただし、可読性を損なわないよう、演算子の本来の意味から大きく外れた実装は避けることが推奨されます。
-
【C言語】演算子を使わずに2つの数値の合計を求めるプログラム
この記事では、C言語のプログラムにおいて+演算子などの演算子を一切使わずに、2つの数値の合計を求めて出力する方法を解説します。一見すると手強そうな問題ですが、printf()関数の「最小フィールド幅」指定を利用することでエレガントに解決できます。printf()では、書式指定子の * を使うことで、可変引数からフィールド幅(出力する最小文字数)を動的に受け取ることができます。例えば、「Hello」という文字列の前にx個の空白を挿入したい場合は、次のように記述します。サンプルコード#include<stdio.h> main() { i
-
【C++】演算子のオーバーロードで複素数の減算を実装する方法
演算子のオーバーロードとはC++では、ほとんどの組み込み演算子に対して演算子のオーバーロード(多重定義)を行うことができます。オーバーロードされた演算子は、キーワードoperatorの後に定義したい演算子記号を続けた形式の関数として実装され、通常の関数と同様に戻り値の型と引数リストを持ちます。本記事では、演算子のオーバーロードを利用して複素数の減算を行うC++プログラムを紹介し、その仕組みを詳しく解説します。サンプルプログラム次のプログラムは、減算演算子-をオーバーロードすることで、複素数同士の引き算を直感的な記法で実現した例です。#include<iostream> using