C++関数オーバーロード実践ガイド:同名異なるシグネチャの活用法
C++ 関数オーバーロード
C++で同じ名前だが異なるシグネチャを持つ複数の関数を定義する方法を、実践的な例で解説します。
C++では、パラメータリストが型、数、順序で異なっていれば、2つの関数が同じ名前を共有できます。これらのバリアントをオーバーロード関数と呼びます。
例えば:
// 同じ名前、異なる引数
int test() { }
int test(int a) { }
float test(double a) { }
int test(int a, double b) { }
上記4つの宣言はすべて有効なオーバーロードセットです。戻り値の型はオーバーロード解決に無関係であり、パラメータリストのみが重要です。例えば:
// コンパイルエラー: 同一シグネチャ
int test(int a) { }
double test(int b) { }
ここでは両関数が同じ名前、同じ型、同じ数の引数を持つため、コンパイラは重複として拒否します。
実例 1: 異なるパラメータ型でのオーバーロード
// intとfloatの絶対値を計算
#include <iostream>
using namespace std;
// float版
float absolute(float var) {
return (var < 0.0f) ? -var : var;
}
// int版
int absolute(int var) {
return (var < 0) ? -var : var;
}
int main() {
cout << "Absolute value of -5 = " << absolute(-5) << endl;
cout << "Absolute value of 5.5 = " << absolute(5.5f) << endl;
return 0;
}
出力
Absolute value of -5 = 5 Absolute value of 5.5 = 5.5
このプログラムは absolute() をオーバーロードしており、コンパイラが引数の型に基づいて適切なバージョンを選択します。
実例 2: 異なるパラメータ数でのオーバーロード
#include <iostream>
using namespace std;
// 2パラメータ版
void display(int var1, double var2) {
cout << "Integer: " << var1;
cout << " & Double: " << var2 << endl;
}
// 単一doubleパラメータ
void display(double var) {
cout << "Double: " << var << endl;
}
// 単一intパラメータ
void display(int var) {
cout << "Integer: " << var << endl;
}
int main() {
int a = 5;
double b = 5.5;
display(a);
display(b);
display(a, b);
return 0;
}
出力
Integer: 5 Double: 5.5 Integer: 5 & Double: 5.5
display() の呼び出しは、引数の数と型に基づいて正しいオーバーロードに解決されます。
sqrt() などの標準ライブラリ関数は int, float, double などを受け入れるよう大幅にオーバーロードされており、開発者に柔軟性を提供します。C言語
- C#メソッドオーバーロード完全ガイド:概念、例、ベストプラクティス
- C#コンストラクタオーバーロード完全ガイド:柔軟なクラス設計
- C++演算子完全ガイド:算術・代入・関係・論理・ビット演算子と実例
- C++コメント完全ガイド:読みやすく保守しやすいコードのためのベストプラクティス
- C++配列を関数に渡す完全ガイド:1次元・多次元配列の実例付き
- C++フレンド関数とフレンドクラス:アクセス制御のマスター
- C言語で1次元・2次元配列を関数に渡す方法 – 実践ガイド
- C++演算子オーバーロード:コード例付き実践ガイド
- C++関数を実例で徹底解説:基本から応用まで
- C言語の関数マスター:構造、宣言、ベストプラクティス
- C++オーバーロード完全マスター:関数と演算子のオーバーロード