関数のオーバーロード

2019年4月9日
C++

C++には1つの関数名で型が異なる関数を定義することができる。以下のコードでは、myabs()という関数名は1つだがint、long、doubleと型が異なる3つの関数を定義している。これを関数のオーバーロードという。

#include <iostream>
using namespace std;

// myabs()関数を3通りにオーバーロードする
int myabs(int n);
long myabs(long n);
double myabs(double n);

int main()
{
  cout << "-10の絶対値: " << myabs(-10) << "\n\n";
  cout << "-10Lの絶対値: " << myabs(-10L) << "\n\n";
  cout << "-10.01の絶対値: " << myabs(-10.01) << "\n\n";
  return 0;
}

// 整数用のmyabs()関数
int myabs(int n)
{
  cout << "整数用のmyabs()\n";
  return n < 0 ? -n : n;
}

// 長整数用のmyabs()関数
long myabs(long n)
{
  cout << "整数用のmyabs()\n";
  return n < 0 ? -n : n;
}

// 倍精度浮動小数点用のmyabs()関数
double myabs(double n)
{
  cout << "倍精度浮動小数点用のmyabs()\n";
  return n < 0 ? -n : n;
}
$ g++ sample5.cpp
$ ./a.out
-10の絶対値: 整数用のmyabs()
10

-10Lの絶対値: 整数用のmyabs()
10

-10.01の絶対値: 倍精度浮動小数点用のmyabs()
10.01