C++入門シリーズの第4回です。関数を使うと、コードの塊に名前を付け、入力を受け取り、どこからでも呼び出せます。あらゆるプログラムを構造化するための核となる道具です。
なぜ関数か#
関数はコードを再利用可能にし、テストしやすく、読みやすくします。同じロジックをコピーする代わりに、一度書いて何度も呼び出します。
最初の関数#
#include <iostream>
int add(int a, int b) {
return a + b;
}
int main() {
int result = add(3, 4);
std::cout << result << '\n'; // 7を出力
}cppaddは2つのintパラメータを取り、intを返します。3と4は実引数です。
戻り値の型とvoid#
値を返さない関数の戻り値の型はvoidです:
void greet(std::string name) {
std::cout << "Hello, " << name << "!\n";
}cpp前方宣言#
定義より前に呼び出す場合 — 例えば複数ファイルに分割するとき — 先に宣言します:
int multiply(int x, int y); // 宣言
int main() {
std::cout << multiply(6, 7) << '\n';
}
int multiply(int x, int y) { // 定義
return x * y;
}cpp宣言は定義と完全に一致している必要があります。
値渡しのパラメータ#
デフォルトでは、C++は実引数をパラメータにコピーします。関数内の変更は呼び出し元に影響しません:
void increment(int x) {
++x;
}
int main() {
int a = 5;
increment(a);
std::cout << a << '\n'; // 依然として5
}cpp呼び出し元の変数を変更するには参照を渡します — 次回の記事で解説します。
デフォルト引数#
パラメータにデフォルトを設定できます:
void print(std::string msg, int times = 1) {
for (int i = 0; i < times; ++i) {
std::cout << msg << '\n';
}
}
print("hi"); // 1回出力
print("hi", 3); // 3回出力cppオーバーロード#
パラメータリストが異なれば、同じ名前の関数を複数定義できます:
int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; }cppコンパイラが実引数の型から適切なものを選びます。
結論#
関数はC++プログラムの構成要素です: 宣言、定義、呼び出し、再利用。シリーズ次回はポインタと参照です。