7.関数 |
|
関数はサブルーチンや副プログラムと呼ばれることもあります。
数学の関数は、xの値によってyの値が決まるものを、xはyの関数といいます。
式にすると y = f ( x ) となります。
Cの関数には、数学の関数という側面とルーチンという側面があります。
ルーチンに、数学の関数的機能を付け加えたものと考えるのがよいでしょう。
|
ルーチンとしての関数 |
int kansuu() //関数の宣言 使う前に宣言しなければならない
{
//ひとまとまりのプログラム
} //文章の終わり記号「;」がいらない
main()
{
//メインルーチン
kansuu(); //→kansuu()関数→ひとまとまりのプログラムを実行→帰ってくる
}
|
[型] [区切り] [関数名(キーワード)] [ () ]
[ { ]
[ひとまとまりのプログラム]
[ } ]
キーワードの次に()が付いていれば、関数と認識しても差し支えありません。
|
2.に書いた例外です。
プログラムは、英文のように処理されます。
しかし、 メイン関数を見つけるまで、関数の存在を認識するだけで実行しません。
メイン関数内で、呼び出された時に初めて実行されます。
実行されるまでに、その関数の存在を認識(宣言)させておかなければなりません。
[ プログラムの流れ ]
int kansuu()を見つけたので認識する → main()関数を見つけたので実行する →
→ kansuu();でサブルーチンkansuu()を処理する → 処理し終わって元の場所に帰ってくる。
|
関数としての機能を使っていません。ただのサブルーチンです。
C++が使われるようになって、関数はルーチンとして使われる率が高くなっています。
関数の()の中を空にすると(設定しなければ)、タダのサブルーチンなのです。
|
数学の関数としての関数 |
関数としての機能も、実現できます。
理解しやすい、すばらしい表記法です。
y = f ( x )を例にして説明していきます。
|
int f(int x) //関数f()の宣言 同時に関数内で使うローカル変数xの宣言
{
return x*2; //戻り値の設定
}
main()
{
int x=10; // 変数xの宣言と初期化
int y; // 変数yの宣言
y=f(x); // 関数f()の実行
}
|
 |
上のように受け渡しをします。
int f(int x) の()内は、引数と呼ばれます。
returnは元の位置に戻れと命令しています。
そのとき、ひとつだけ数字を持って帰れます。
return [区切り] [戻り値] [ ; ]
これによって、xの値によってyの値が決定されるのです。
|
数学の関数と同じ表記法で、y = f ( x )と同じふるまいをプログラム上で実現できます。
[ 解説 ]
メイン関数内のf(x)によって、f()関数が呼び出されます。
すると、 f(x)で指定された変数xを、f()関数にもっていきます。
int f(int x) で新しく宣言されたxに渡されます。
そのxを使ってf()内で内部処理されます。
return x*2;によって、帰ってくる変数が決まります。
f(x)=x*2;というようなイメージになります。
f(x)=x*2;なので、y=f(x); がy=x*2;となります。
[ 詳細 ]
int f(int x)
関数f()の宣言です。
( )内で、この関数ないだけで使えるローカル変数を宣言しています。
同時に、メイン関数内で呼び出された f(x)によって10がxに渡されます。
イメージでは、int f(int x=x)という感じです。
y=f(x); でのxを引数(ひきすう)と呼びます。
よく本に出てきますし、これよりマッチした言葉を思いつかないので、引数を使います。
覚えておきましょう。
注意 1
y=が重要な意味を持っています。
もう一度f(x)の中身を見たいとき、z= f(x);のようにすると、もう一度ルーチンを処理するので、前とは違う結果になる可能性が大いにあります。
注意 2
受け渡される側と受け取る側の型は、当然同じでなければなりません。
|
引数は、複数設定することができます。
int f(int x,int y,int z)
上のように、「,」(カンマ)で区切ります。
y=f(x,y,z);
のように呼び出せます。
前から順番に、対応されます。x=x,y=y,z=z となります。
注意
y=f(z,y,x);
だと、z=x,y=y,x=z となります。キーワードに関係なく順番に代入されていきます。
|
すばらしい記述法ですよね。
しかし昔ほど、この関数的関数はC++で使われなくなってきています。
クラスを使うほうが楽だからです。
実は、これと一緒にC++ではポインタを意識せずに使えるようになっています。
関数もポインタもすばらしい機能ですが、意識して使う機会は少なくなっています。
初心者のひとは、関数の受け渡しやポインタを
無理に使わないほうがいいかもしれません。
それなりにプログラムを組めるようになってからでも、覚えられるものです。
難解なポインタや使いにくい値渡しより、クラスを使って楽をしましょう。
クラスでも単純な関数を使うので、関数はそれなりに使わなくてはなりません。
単純な関数を作ることで、少しずつなれていきましょう。
|
他に、プロトタイプ宣言や参照渡しなど、いろいろ便利な機能がありますが、
クラスを使うのであれば、そんなに使う機能ではありません。
C++総合環境のページで解説しています。
興味があれば、 勉強しましょう。
|