2回目 関数と参照・アインズ・ウール・ゴウン
🎯 第2回 関数と参照・オーバーロード
🏁 授業目標
- ✳️ C++の関数定義・宣言・呼び出しを理解する
- 🔒 const参照(const &)の使い方を理解する
- 🔁 関数のオーバーロードを使って柔軟な関数設計ができるようにする
🧠 関数の基本
C++の関数は、処理をまとめて呼び出せる仕組みです。
関数には「宣言」と「定義」があり、呼び出すときは名前と引数を使います。
#include <iostream>
using namespace std;
int add(int a, int b); // 宣言
int main() {
int result = add(2, 3);
cout << result << endl; // 5
}
int add(int a, int b) {
return a + b;
}💬 ポイント
- 関数宣言(プロトタイプ)は main より前に書く
- main のあとに本体(定義)を書くのが一般的
🧩 const参照の基本
大きなデータをコピーせずに扱いたいときに便利!
void show(const string& name) {
cout << "Hello, " << name << endl;
}🔒 const参照のメリット
- コピーが発生しない → 高速
- 値を変更できない → 安全
- 一時オブジェクトも受け取れる
種類 | 内容 | 特徴 |
|---|---|---|
値渡し | コピーして渡す | 安全だが遅い場合もある |
参照渡し | 実体を直接操作 | 変更される可能性あり |
const参照 | 読み取り専用参照 | 安全で効率的 |
⚙️ 関数のオーバーロード
同じ名前で引数が違う関数を複数定義できる!
int area(int w, int h) { return w * h; }
double area(double r) { return 3.14 * r * r; }🔎 注意
- 戻り値の型だけ違ってもNG
- 引数の数・型・順序が異なる必要あり
💡 const参照+オーバーロードの組み合わせ
void print(string& s) { cout << "L-Value: " << s << endl; }
void print(const string& s) { cout << "Const: " << s << endl; }👉 実体(変数)ならL-Value版、一時文字列ならconst参照版!
🧪 演習問題
1️⃣ 2つの整数を足す関数 add
2️⃣ 名前を受け取って挨拶する greet(const string&)
3️⃣ 面積を求める area を整数/実数でオーバーロード
🏆 まとめ
- 関数は「処理をまとめる箱」
- const参照で安全・高速な引数渡し
- オーバーロードで同じ名前の関数を使い分け