🎯 第2回 関数と参照・オーバーロード


  • C++の関数の定義・宣言・呼び出しを理解する
  • const参照(const &)の使い方を理解する
  • 関数のオーバーロードを使って柔軟な関数設計ができるようにする
  • ヘッダファイル(.h)とソースファイル(.cpp)の役割を理解する

C++の関数は、変数や処理をひとまとめにし、複数回呼び出せる便利な構造です。

関数には 宣言(プロトタイプ)定義 があり、main()より上に宣言を書き、下に定義を書くのが一般的です。

書式のイメージ:

// 関数の宣言
int add(int a, int b);
 
int main() {
int result = add(3, 5); // 呼び出し
return 0;
}
 
// 関数の定義
int add(int a, int b) {
return a + b;
} 

C++では、関数を複数のファイルに分けて管理します。これによりプログラムの見通しが良くなり、再利用も容易になります。

役割の違い:

ファイル 拡張子 主な役割
ヘッダファイル .h または .hpp 関数やクラスの「宣言」だけを書く
ソースファイル .cpp 関数やクラスの「定義」(実際の処理)を書く

書き方の例:

// math.h
#pragma once
int add(int a, int b);
int sub(int a, int b); 
// math.cpp
#include "math.h"
 
int add(int a, int b) {
return a + b;
}
 
int sub(int a, int b) {
return a - b;
} 
// main.cpp
#include <iostream>
#include "math.h"
 
int main() {
std::cout << add(5, 3) << std::endl;
std::cout << sub(5, 3) << std::endl;
} 

💡 ポイント

  • ヘッダには「宣言」、cppには「定義」
  • 同じ関数を複数の場所で使いたいときに便利
  • `#pragma once` で二重インクルードを防止

大きなデータをコピーせずに扱う際に便利です。

const参照とは、実体のアドレスを受け取り、それを変更せずに利用する方法です。

種類 内容 特徴
値渡し 値をコピー 安全だが遅い場合もある
参照渡し 実体を直接操作 変更される可能性あり
const参照 実体を読み取り専用で参照 安全で高速

メリット

  • コピーが発生しない → 高速
  • 値を変更できない → 安全
  • 一時オブジェクトも受け取れる
void printName(const std::string& name) {
    std::cout << "Hello, " << name << std::endl;
}
 
int main() {
std::string s = "Taro";
printName(s);          // 実体を渡す
printName("Hanako");   // 一時文字列もOK
} 

同じ名前の関数を、引数の数・型・順序の違いで複数定義できる機能です。

ポイント

  • 戻り値の型だけの違いでは区別できない
  • 引数リスト(数・型・順序)を変える必要がある
int area(int w, int h) {
    return w * h;
}
 
double area(double r) {
return 3.14 * r * r;
}
 
int main() {
std::cout << area(3, 4) << std::endl; // 長方形
std::cout << area(2.5) << std::endl;  // 円
} 

C++の関数を応用的に扱うための練習問題です。

  • 1️⃣ swapInts(int&, int&) — 2つの整数を入れ替える関数を作成せよ。
    • ポイント:参照渡しを利用して、呼び出し元の値が入れ替わるようにする。
  • 2️⃣ maxValue(const int&, const int&) — 2つの値のうち大きい方を返す関数を作成せよ。
    • const参照を用いて安全に比較する。
  • 3️⃣ printValue をオーバーロードし、int型・double型・string型に応じて異なる出力を行う関数を定義せよ。
    • 例:`printValue(3.14)` → “double型の値: 3.14”
  • 4️⃣ calcAverage をオーバーロードし、(1) int配列、(2) double配列 の平均値を返す関数を作成せよ。
    • ポイント:配列と要素数を引数にとる。
  • 5️⃣ appendString(std::string&, const std::string&) — 2つの文字列を結合し、呼び出し元の文字列に反映させる関数を作成せよ。
    • ポイント:第1引数を参照渡しで受け取り、内容を直接変更する。

  • 関数は「処理をまとめる箱」
  • const参照で安全・高速な引数渡し
  • オーバーロードで同じ名前の関数を使い分け
  • 宣言はヘッダ、定義はcppに分けて管理する
  • 参照渡しで呼び出し元の値を直接変更できる
  • game-engineer/classes/2025/game-development-2/no-06.txt
  • 最終更新: 3カ月前
  • by root