プログラミング

C++超入門⑤ 関数で処理を分けよう

関数、引数、戻り値、void、変数のスコープを学び、長い処理を役割ごとに分けます。

第5回では、処理をひとまとまりにする関数を学びます。

同じ処理を何度も使いたいときや、長いプログラムを読みやすく分けたいときに役立ちます。

この回でできるようになること

  • 関数を作って呼び出す
  • 関数へ値を渡す
  • 計算結果を呼び出し元へ返す
  • 変数を使える範囲を知る

関数の基本

2つの整数を足す関数を作ってみましょう。

int add(int a, int b) {
    int result = a + b;
    return result;
}
部分 意味
int add int型の値を返すaddという関数
int a, int b 関数が受け取る値
return result 計算結果を呼び出し元へ返す

関数が受け取るaとbを引数、関数が返す結果を戻り値と呼びます。

関数を呼び出す

作った関数は、main関数などから呼び出します。

#include <iostream>

int add(int a, int b) {
    return a + b;
}

int main() {
    int answer = add(3, 5);
    std::cout << answer << '\n';
    return 0;
}

add(3, 5)を実行すると、戻り値の8がanswerへ入ります。

この例では、add関数をmain関数より前に書いています。先に書いておくと、main関数からadd関数の存在が分かります。

値を返さないvoid関数

画面表示だけを行い、値を返さない関数にはvoidを使います。

#include <iostream>
#include <string>

void greet(std::string name) {
    std::cout << "こんにちは、" << name << "さん。\n";
}

int main() {
    greet("Aoi");
    greet("Ren");
    return 0;
}

同じ表示処理を、名前だけ変えて何度でも使えます。

trueかfalseを返す関数

偶数か調べる処理も関数にできます。

bool isEven(int number) {
    return number % 2 == 0;
}

numberを2で割った余りが0ならtrue、そうでなければfalseを返します。

if (isEven(8)) {
    std::cout << "偶数です。\n";
}

関数名を「何を調べる関数か」が分かる名前にすると、コードを文章のように読めます。

変数を使える範囲

変数を使える範囲をスコープと呼びます。

void sample() {
    int number = 10;
}

numberはsample関数の波かっこの中だけで使えます。main関数から直接使うことはできません。

必要な値は引数で渡し、結果は戻り値で返すと、関数同士の関係が分かりやすくなります。

小さな練習

2つの整数を受け取り、大きい方を返すmaxNumber関数を作ってください。

関数の中でif文を使います。同じ値だった場合は、どちらを返しても構いません。

模範解答

#include <iostream>

int maxNumber(int a, int b) {
    if (a >= b) {
        return a;
    }
    return b;
}

int main() {
    std::cout << maxNumber(12, 7) << '\n';
    return 0;
}

解説

aがb以上ならaを返します。returnが実行されると関数はそこで終了するため、条件に当てはまらない場合だけ最後のreturn bへ進みます。

まとめ

  • 関数を使うと、処理を役割ごとに分けられます。
  • 引数は関数へ渡す値、戻り値は関数から返る値です。
  • 変数には使える範囲があり、その範囲をスコープと呼びます。

前の記事:C++超入門④ while文とfor文で処理を繰り返そう

次の記事:C++超入門⑥ 配列・vector・stringを使おう

← 記事一覧へ戻る