関数のオーバーロード

C++では、引数の数や、引数型の違いによって、同じ関数名を持つ動作の違う別の関数を定義できる・・・。
これを、関数のオーバーロードという・・・。

前回のclass_string_bufferでcreateという文字列バッファ生成関数があったが、生成だけじゃなく特定の文字列にセット(つまり初期化)する処理も加えて行う関数を追加してみよう・・・。

これまでは文字列バッファのサイズであるsizeだけを指定していたが、新しい関数では初期文字列src_strも指定する・・・。
sizeの後ろにsrc_strをつけてもよさそうだが、sizeはデフォルト引数の制約(デフォルト引数のある引数は、ない引数より右に書かないといけない)もあり、先にsrc_str、そのあとsizeとしている・・・。

で中身は、create(int size)が、

なのに対し、create(const char *src_str, int size)は、

と中でcreate(int size)とsetを呼び出しているだけだったりする・・・。
もちろん、独自の処理を書くこともできるが、オーバーロード元のメンバ関数や他のメンバ関数を利用することが多い・・・。

main関数で、

とoverloadを宣言したら、

こんな感じで生成と初期化を同時にする・・・。

実行してみると、

$ ./function_overload
buffer.get_size() = 32
half.get_size() = 16
overload.get_size() = 24
buf = ABCDEFGHIJKLMNOPQRSTUVWXYZ12345
half_buf = ABCDE
overload_buf = ABCDEFGHIJKLMNOPQRSTUVW
$

サイズも指定した文字列もセットされてる・・・。(といっても、overloadにセットしたときに"XYZ"が切られてしまっているけども・・・。)

Sample/function_overload.cpp at master · bg1bgst333/Sample · GitHub