関数やコンストラクタのオーバーロード
2016年9月17日:C++
C言語では、絶対値を計算する際、int、long、floatに対して各々の関数abs,labs,fabsを用意していました。この場合、関数の名前が複雑になります。この問題を解決するのが、関数のオーバーロードです。オーバーロードを使用するとabsだけで様々な型に対応することが可能となります。
様々な型に対応した足し算関数
簡単な例として、int、float、doubleに対応した足し算関数waを作ってみましょう。
#include <iostream> using namespace std; int wa(int i,int j){ cout << "int" <<endl; return i+j; } float wa(float i,float j){ cout << "float" <<endl; return i+j; } double wa(double i,double j){ cout << "duble" <<endl; return i+j; } int main(void){ int i=10, j=20; int k=wa(i,j); cout << k << endl; return 0; }
int
30
このプログラムでは、int、float、doubleに対応した関数
- int wa(int i,int j)
- float wa(float i,float j)
- double wa(double i,double j)
を用意してあります。名前はwaと同じですが、引数や戻り値が異なります。そのため、引数がintならint waが選ばれ、doubleならdouble waが関数として選ばれます。これが関数のオーバーロードと呼ばれる仕組みです。
コンストラクタのオーバーロード
関数と同様にコンストラクタもオーバーロードできます。引数に応じて適切なコンストラクタが選択されます。
#include <iostream> using namespace std; class A{ int i; public: A(){i=0;} A(int j){i=j;} int get(){return i;} }; int main(void){ A a(1); cout << a.get() << endl; return 0; }
1
この場合は引数が1なので、コンストラクタA(int j)が呼ばれ、iが1となります。
著者:安井 真人(やすい まさと)
@yasui_masatoさんをフォロー