C++関数のリロードとデフォルトパラメータのマクロ理解


『c++プログラミング思想』読書ノート(7)
5章関数リロードとデフォルトパラメータ
全体:オブジェクト(変数)を作成するときは、このストレージに名前を付けます.関数は操作の名前です.システムがさまざまな名前を記述してこそ、人々が理解しやすく修正しやすいプログラムを書くことができます.この目的を達成するために、関数のリロードは当然現れます.
1)自然言語の同じ語は多くの異なる意味を表すことができ、これは文脈によって確定され、これはいわゆる一語多義である--この語は重荷されている.この点は非常に役に立ち、特に細かい違いに役立ちます.「洗濯、車を洗う」と言ってもいいが、「洗濯、車を洗う」と言わなければ滑稽だ.
2)しかし、多くのプログラミング言語では、関数ごとに一意の識別子を設定する必要があります.3つの異なるタイプのデータを印刷したい場合はprint_を書く可能性があります.int() , print_float(), printf_char()は,プログラミングの作業量を増大させ,可読性を低下させるに違いない.
3)c++では,もう1つの理由として関数名を再ロードする必要がある:コンストラクション関数,コンストラクション関数の名前はクラスの名前で予め決定されているため,コンストラクション関数名は1つしか持たない.したがって、いくつかの異なる方法でオブジェクトを作成する場合に、関数の再ロードが必要です.したがって、関数の再ロードの本質は、関数の同名を許可することです.この場合、コンストラクション関数は異なるパラメータタイプで呼び出されます.
4)リロードは、非メンバー関数を含む他の関数にも便利です.さらに、関数のリロードは、パラメータが異なる限り競合しない同じ名前の関数を持つ2つのライブラリがあることを意味します.
5)c++では、戻り値を再ロードすることは許されません.なぜなら、私たちは常に関数を呼び出して戻り値を無視することができるからです.
6)デフォルト関数は,ユーザが関数を呼び出すときにパラメータ値を指定せずにコンパイラによってパラメータ値を挿入するパラメータである.このようにf(「hello」)、f(「hi」,1)、f(「howdy」,2,「c」)は、同じ関数を呼び出すために使用することができる.もちろん、再ロードされた3つの関数を呼び出す可能性もあります.
7)c++のデフォルトパラメータは、関数宣言時に与えられた値であり、呼び出し関数がこのパラメータを指定していない値である場合、コンパイラは自動的にこの値を挿入します.次のようにします.
stash (int size);  // zero quantity
stash (int size, int quantity);

次の代わりに関数宣言を使用します.
stash (int size, int quantity = 0);

これにより、stash(int)の定義が簡略化され、必要なのは単一のstash(int,int)定義だけである.
8)デフォルト関数は、関数のリロードと同様に、プログラマーに多くの便利さを提供し、異なる場合に同じ名前を使用することができます.ただし、関数間の動作の違いが大きい場合は、デフォルトのパラメータでは適切ではありません.
9)デフォルトパラメータを使用する場合、2つのルールを覚えておきます.1つ目は、パラメータリストの後部パラメータだけがデフォルトであり、つまり、1つのデフォルトパラメータの後ろにデフォルトではないパラメータを付けることはできません.第二に、デフォルトパラメータの使用を開始すると、このパラメータの後ろのすべてのパラメータがデフォルトでなければなりません(これは第1条からエクスポートできます).
10)デフォルトのパラメータは関数宣言にのみ適用され、通常はヘッダファイルに配置され、コンパイラは関数を使用する前にデフォルト値を知る必要があります.また、デフォルトのパラメータは、宣言されたパラメータに識別子を持たないようにすることができます.これは興味深いように見えます.私たちはこのように宣言することができます.
void f(int x, int = 0, float = 1.1);

小結:関数のリロードとデフォルトのパラメータは、関数の呼び出しに便利です.しかし,デフォルトパラメータをフラグとして実行関数のどのブロックを決定するかは基本原則である.この場合,可能であれば,関数を2つ以上の重荷の関数に分解すべきである.デフォルトのパラメータは、特にこれらの関数の多くのパラメータに特定の値がある場合に、関数呼び出しを容易にするために適用されます.特に、ユーザーがパラメータを作成する過程で、最も調整不可能なデフォルトパラメータをパラメータテーブルの一番後ろに置くと、書く関数の呼び出しが容易になるだけでなく、読むのも便利になります.