functions c with types examples
C ++の関数の種類とその用途。
これまでの以前のチュートリアルでは、変数、ストレージクラス、演算子、配列、文字列など、C ++のさまざまな概念を見てきました。
このチュートリアルでは、先に進み、関数の概念について説明します。関数は、メソッド、サブルーチン、またはプロシージャとも呼ばれます。
=> ここで広範なC ++トレーニングチュートリアルシリーズをお読みください。
学習内容:
- 関数をどのように定義しますか?
- C ++の関数の種類
- 関数宣言
- 関数定義
- 関数の呼び出し
- 正式なパラメータと実際のパラメータ
- 戻り値
- ボイド関数
- 関数へのパラメーターの受け渡し
- デフォルトパラメータ
- 定数パラメータ
- インライン関数
- 関数での構造体の使用
- 結論
- 推奨読書
関数をどのように定義しますか?
関数は、特定のタスクを実行するためにまとめられたステートメントのセットです。それは、いくつかの繰り返されるタスクを実行するステートメント、または印刷などのいくつかの特殊なタスクを実行するステートメントである可能性があります。
関数を持つことの1つの使用法は、関数と呼ばれる小さな単位にコードを分割することによってコードを単純化することです。関数の使用の背後にあるさらに別のアイデアは、同じコードを何度も書く必要がないということです。同じステートメントのセットを何度も書くことなく、1つの関数を記述し、必要に応じてそれを呼び出すだけです。
C ++の関数の種類
C ++には、以下の2種類の関数があります。
組み込み関数
組み込み関数は、ライブラリ関数とも呼ばれます。これらはC ++によって提供される関数であり、自分で作成する必要はありません。これらの関数をコードで直接使用できます。
xmlファイルを開くもの
これらの関数は、C ++のヘッダーファイルに配置されます。 例えば 、、は、それぞれ組み込みの数学関数と文字列関数を持つヘッダーです。
プログラムで組み込み関数を使用する例を見てみましょう。
#include #include using namespace std; int main() { string name; cout << 'Enter the input string:'; getline (std::cin, name); cout << 'String entered: ' << name << '!
'; int size = name.size(); cout<<'Size of string : '< 出力:
入力文字列を入力します:ソフトウェアテストヘルプ
入力された文字列:ソフトウェアテストヘルプ!
文字列のサイズ:21
ここでは、ヘッダーとを使用しています。データ型およびその他の入出力関数は、ライブラリで定義されています。 getline、sizeなどの文字列関数は、ヘッダーの一部です。
ユーザー定義関数
C ++では、ユーザーが独自の関数を定義することもできます。これらはユーザー定義関数です。プログラムのどこにでも関数を定義し、コードの任意の部分からこれらの関数を呼び出すことができます。変数と同様に、使用する前に宣言する必要があります。関数も、呼び出す前に宣言する必要があります。
ユーザー定義関数について詳しく説明します。
ユーザー定義関数(または単に関数)の一般的な構文は次のとおりです。
return_type functionName(param1,param2,….param3) { Function body; }
したがって、上記のように、各関数には次のものがあります。
- 戻り値の型: 特定のタスクを実行した後、関数が呼び出し元の関数に戻る値です。
- functionName :関数に名前を付けるために使用される識別子。
- パラメータリスト: 上記の構文では、param1、param2、…paramnで示されます。これらは、関数呼び出しが行われたときに関数に渡される引数です。パラメータリストはオプションです。つまり、パラメータのない関数を使用できます。
- 機能本体: 特定のタスクを実行するステートメントのグループ。
すでに述べたように、関数を使用する前に関数を「宣言」する必要があります。
関数宣言
関数宣言は、関数の戻り値の型、関数によって使用されるパラメーターの数、およびそのデータ型についてコンパイラーに通知します。関数内のパラメーターの名前を含めて、宣言はオプションです。関数宣言は、関数プロトタイプとも呼ばれます。
参考までに、関数宣言の例をいくつか示します。
int sum(int, int);
上記の宣言は、2つの整数をパラメーターとして受け取り、整数値を返す関数「sum」です。
void swap(int, int);
これは、スワップ関数がint型の2つのパラメーターを取り、値を返さないため、戻り値の型がvoidであることを意味します。
void display();
関数displayはパラメーターを受け取らず、型も返しません。
関数定義
関数定義には、関数宣言に含まれるすべてのものが含まれ、さらに中括弧({})で囲まれた関数の本体も含まれます。
さらに、名前付きパラメーターも必要です。関数が呼び出されると、プログラムの制御が関数定義に渡され、関数コードを実行できるようになります。関数の実行が終了すると、制御は関数が呼び出されたポイントに戻ります。
上記のスワップ関数の宣言の場合、定義は次のとおりです。
void swap(int a, int b){ b = a + b; a = b - a; b = b - a; }
関数の宣言と定義は一緒に行うことができることに注意してください。参照する前に関数を定義する場合、個別の宣言は必要ありません。
関数を示すために、完全なプログラミング例を見てみましょう。
#include using namespace std; void swap(int a, int b) { //here a and b are formal parameters b = a + b; a = b - a; b = b - a; cout<<'
After swapping: '; cout<<'a = '< 関数の呼び出し プログラムに関数がある場合、要件に応じて、この関数を呼び出すか呼び出す必要があります。関数が呼び出されたとき、または呼び出されたときのみ、関数は一連のステートメントを実行して、目的の結果を提供します。
この関数は、プログラムのどこからでも呼び出すことができます。プログラムが複数の関数を使用している場合は、main関数または他の関数から呼び出すことができます。別の関数を呼び出す関数を「呼び出し関数」と呼びます。
上記の番号の交換の例では、スワップ関数がmain関数で呼び出されています。したがって、メイン関数が呼び出し元関数になります。
正式なパラメータと実際のパラメータ
関数のパラメーターを持つことができることはすでに見てきました。関数パラメーターは、関数名に続くパラメーターリストとして関数定義で提供されます。関数が呼び出されると、これらのパラメーターの実際の値を渡して、これらの実際の値を使用して関数がタスクを実行できるようにする必要があります。
関数定義で定義されているパラメーターは呼び出されます 仮パラメータ 。実際の値である関数呼び出しのパラメーターが呼び出されます 実際のパラメータ。
上記の数値交換の例では、仮パラメータと実パラメータのコメントを記述しています。呼び出し元の関数、つまりmainでは、2つの整数の値が読み取られ、スワップ関数に渡されます。これらは実際のパラメータです。
クロスブラウザの互換性をテストする方法
これらのパラメーターの定義は、関数定義の最初の行で確認できます。これらは正式なパラメータです。
正式な引数と実際の引数のタイプは一致する必要があることに注意してください。仮パラメータと実際のパラメータの順序も一致する必要があります。
戻り値
関数が目的のタスクを実行すると、呼び出し元の関数に結果を返す必要があります。このためには、関数の戻り値の型が必要です。この関数は、呼び出し元の関数に単一の値を返すことができます。関数の戻り値の型は、関数プロトタイプとともに宣言されます。
戻り値の型を示すために2つの数値を追加する例を見てみましょう。
#include using namespace std; int sum(int a, int b){ return (a+b); } int main() { int a, b, result; cout<>a>>b; result = sum(a,b); cout<<'
Sum of the two numbers : '< 出力:
追加する2つの数字を入力します:11 11
2つの数値の合計:22
上記の例では、2つの整数パラメーターを受け取り、整数型を返す関数sumがあります。 main関数では、コンソール入力から2つの整数を読み取り、それをsum関数に渡します。戻り値の型は整数であるため、LHSには結果変数があり、RHSは関数呼び出しです。
関数が実行されると、関数の合計によって返される式(a + b)が結果変数に割り当てられます。これは、関数の戻り値がどのように使用されるかを示しています。
ボイド関数
関数の一般的な構文では、戻り値の型を定義する必要があることを確認しました。しかし、値を返さない関数がある場合、その場合、戻り値の型として何を指定しますか?答えは、関数が値を返さないことを示すために、値のない型「void」を使用することです。
このような場合、関数は「void関数」と呼ばれ、そのプロトタイプは次のようになります。
void functionName(param1、param2、….param3);
注意 :「return;」というステートメントを含めることをお勧めします。わかりやすくするために、void関数の最後にあります。
関数へのパラメーターの受け渡し
実際のパラメータと正式なパラメータの概念はすでに見てきました。また、実際のパラメーターは、フォーマットパラメーターによって受信される関数に値を渡すこともわかっています。これは、パラメーターの受け渡しと呼ばれます。
C ++では、以下で説明するように、パラメーターを渡す特定の方法があります。
値渡し
前に説明した2つの整数をスワップするプログラムでは、mainで整数「a」と「b」を読み取り、それらをスワップ関数に渡すだけであることがわかりました。これは、値渡しの手法です。
パラメータ受け渡しの値渡し技術では、実際のパラメータの値のコピーが仮パラメータに渡されます。このため、実際のパラメータと仮パラメータは異なるメモリ位置に格納されます。したがって、関数内の仮パラメーターに加えられた変更は、関数外には反映されません。
もう一度2つの数値の交換にアクセスすることで、これをよりよく理解できます。
#include using namespace std; void swap(int a, int b) { //here a and b are formal parameters b = a + b; a = b - a; b = b - a; cout<<'
After swapping inside Swap:
'; cout<<'a = '< 参照渡し 参照渡しは、C ++がパラメーターを関数に渡すために使用するさらに別の手法です。この手法では、実際のパラメーターのコピーを渡す代わりに、実際のパラメーターへの参照を渡します。
注意: 参照は変数のエイリアスにすぎません。簡単に言えば、変数に付けられる別の名前です。したがって、変数とその参照は同じメモリ位置を共有します。参照については、後続のチュートリアルで詳しく学習します。
パスバイリファレンス手法では、実際のパラメーターのこれらの参照を使用します。その結果、関数内の仮パラメーターに加えられた変更は、呼び出し元の関数に反映されます。
読者が概念をよりよく理解できるように、スワップ関数を変更します。
#include #include using namespace std; void swap(int &a, int &b){ int temp = a; a = b; b = temp; } int main() { int a,b; cout<>a>>b; cout<<'a = '< ポインタを渡す C ++では、ポインター変数を使用して関数にパラメーターを渡すこともできます。ポインター渡しの手法では、参照渡しの場合と同じ結果が得られます。これは、仮パラメータと実パラメータの両方が同じメモリ位置を共有し、関数で行われた変更が呼び出し元の関数に反映されることを意味します。
唯一の違いは、参照渡しではパラメーターの参照またはエイリアスを処理するのに対し、ポインター渡し手法ではポインター変数を使用してパラメーターを渡すことです。
ポインター変数は、ポインター変数が特定の変数を指す参照とは異なり、参照とは異なり、それが指す変数を変更できます。以降のチュートリアルでは、ポインタの詳細について説明します。
Pass by Pointer手法を示すために、2つの整数のスワッピングを再度示します。
#include #include using namespace std; void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } int main() { int a,b; cout<>a>>b; cout<<'a = '< デフォルトパラメータ C ++では、関数パラメーターのデフォルト値を提供できます。この場合、関数を呼び出すときに、パラメーターを指定しません。代わりに、関数はプロトタイプで提供されるデフォルトのパラメーターを取ります。
次の例は、デフォルトパラメータの使用法を示しています。
#include #include using namespace std; int mathoperation(int a, int b = 3, int c = 2){ return ((a*b)/c); } int main() { int a,b,c; cout<>a>>b>>c; cout< 出力:
a、b、cの値を入力してください:10 4 6
Windows10用の最高のドライバーソフトウェア
1つの引数でmathoperationを呼び出す:15
2つの引数を使用したmathoperationの呼び出し:20
3引数でmathoperationを呼び出す:6
コード例に示されているように、3つのパラメーターを取得する関数「mathoperation」があり、そのうち2つのパラメーターにデフォルト値を指定しています。次に、main関数で、異なる引数リストを使用してこの関数を3回呼び出します。
最初の呼び出しは、引数が1つだけです。この場合、他の2つの引数にはデフォルト値があります。次の呼び出しは2つの引数を使用します。この場合、3番目の引数にはデフォルト値があります。 3番目の呼び出しは3つの引数を使用します。この場合、3つの引数すべてを指定したため、デフォルト値は無視されます。
デフォルトのパラメータを提供している間は、常に右端のパラメータから開始することに注意してください。また、間にあるパラメータをスキップして、次のパラメータのデフォルト値を指定することはできません。
次に、プログラマーの観点から重要ないくつかの特殊関数関連の概念に移りましょう。
定数パラメータ
「const」キーワードを使用して、定数パラメータを関数に渡すこともできます。パラメータまたは参照がconstの場合、関数内で変更することはできません。
constパラメーターをnon-const仮パラメーターに渡すことはできないことに注意してください。ただし、constパラメーターとnon-constパラメーターをconst仮パラメーターに渡すことはできます。
同様に、constreturn-typeを持つこともできます。この場合も、戻り値の型を変更することはできません。
const参照を使用するコード例を見てみましょう。
#include #include using namespace std; int addition(const int &a, const int &b){ return (a+b); } int main() { int a,b; cout<>a>>b; cout<<'a = '< 出力:
交換する2つの番号を入力します:22 33
a = 2 b = 33
追加結果:55
上記のプログラムでは、constの仮パラメータがあります。実際のパラメーターは、正常に渡された通常の非const変数であることに注意してください。仮パラメーターはconstであるため、関数内で変更することはできません。したがって、加算操作を実行して値を返すだけです。
関数内でaまたはbの値を変更しようとすると、コンパイラーはエラーを発行します。
インライン関数
関数呼び出しを行うには、内部的に、関数に制御を渡す前にプログラムの状態をスタックに格納するコンパイラーが必要であることがわかっています。
関数が戻ると、コンパイラはプログラムの状態を取得して、元の場所から続行する必要があります。これはオーバーヘッドをもたらします。したがって、C ++では、いくつかのステートメントで構成される関数がある場合は常に、インラインで展開できる機能があります。これは、関数をインライン化することによって行われます。
したがって、インライン関数は実行時に拡張される関数であり、関数を呼び出してスタックを変更する手間を省きます。ただし、関数をインラインとして作成した場合でも、コンパイラは実行時に拡張されることを保証しません。つまり、関数をインライン化するかどうかは、コンパイラーに完全に依存しています。
一部のコンパイラは、小さい関数を検出し、インラインで宣言されていなくてもインラインで展開します。
以下は、インライン関数の例です。
inline int addition(const int &a,const int &b){ return (a+b); }
上に示したように、関数をインラインにするために、関数定義の前にキーワード「inline」を付けます。
関数での構造体の使用
通常の変数をパラメーターとして渡すのと同様の方法で、構造変数をパラメーターとして渡すことができます。
これを次の例に示します。
#include #include using namespace std; struct PersonInfo { int age; char name(50); double salary; }; void printStructInfo(PersonInfo p) { cout<<'PersonInfo Structure:'; cout<<'
Age:'< p.age; cout <> p.salary; printStructInfo(p); }
出力:
名前を入力してください:Vedang
年齢を入力してください:22
給与を入力してください:45000.00
PersonInfo構造:
年齢:22歳
名前:ヴェーダーン
給与:45000

上記のプログラムに示されているように、他の変数と同じように機能する構造体を渡します。標準入力から構造体メンバーの値を読み取り、構造体を表示する関数に構造体を渡します。
結論
これはすべて、C ++の関数の基本に関するものでした。
今後のチュートリアルでは、C ++の静的関数について詳しく説明します。
=> ここで完全なC ++無料トレーニングシリーズを確認してください。
推奨読書