# 2回目　関数と参照・アインズ・ウール・ゴウン

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

## 🏁 授業目標

- ✳️ C++の関数定義・宣言・呼び出しを理解する
- 🔒 const参照（const &amp;）の使い方を理解する
- 🔁 関数のオーバーロードを使って柔軟な関数設計ができるようにする

---

## 🧠 関数の基本

C++の関数は、処理をまとめて呼び出せる仕組みです。  
関数には「宣言」と「定義」があり、呼び出すときは名前と引数を使います。

```cpp
#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;
}
```

<span style="white-space: pre-wrap;">💬 </span>****ポイント****

- 関数宣言（プロトタイプ）は main より前に書く
- main のあとに本体（定義）を書くのが一般的

---

## 🧩 const参照の基本

大きなデータをコピーせずに扱いたいときに便利！

```cpp
void show(const string& name) {
    cout << "Hello, " << name << endl;
}
```

<span style="white-space: pre-wrap;">🔒 </span>****const参照のメリット****

- コピーが発生しない → 高速
- 値を変更できない → 安全
- 一時オブジェクトも受け取れる

<table id="bkmrk-%E7%A8%AE%E9%A1%9E%E5%86%85%E5%AE%B9%E7%89%B9%E5%BE%B4%E5%80%A4%E6%B8%A1%E3%81%97%E3%82%B3%E3%83%94%E3%83%BC%E3%81%97%E3%81%A6%E6%B8%A1%E3%81%99%E5%AE%89%E5%85%A8%E3%81%A0%E3%81%8C"><colgroup><col></col><col></col><col></col></colgroup><tbody><tr><th>種類

</th><th>内容

</th><th>特徴

</th></tr><tr><td>値渡し

</td><td>コピーして渡す

</td><td>安全だが遅い場合もある

</td></tr><tr><td>参照渡し

</td><td>実体を直接操作

</td><td>変更される可能性あり

</td></tr><tr><td>const参照

</td><td>読み取り専用参照

</td><td>安全で効率的

</td></tr></tbody></table>

---

## ⚙️ 関数のオーバーロード

同じ名前で引数が違う関数を複数定義できる！

```cpp
int area(int w, int h) { return w * h; }
double area(double r) { return 3.14 * r * r; }
```

<span style="white-space: pre-wrap;">🔎 </span>****注意****

- 戻り値の型だけ違ってもNG
- 引数の数・型・順序が異なる必要あり

---

## 💡 const参照＋オーバーロードの組み合わせ

```cpp
void print(string& s) { cout << "L-Value: " << s << endl; }
void print(const string& s) { cout << "Const:  " << s << endl; }
```

👉 実体（変数）ならL-Value版、一時文字列ならconst参照版！

---

## 🧪 演習問題

<span style="white-space: pre-wrap;">1️⃣ 2つの整数を足す関数 </span>`<span class="editor-theme-code">add</span>`  
<span style="white-space: pre-wrap;">2️⃣ 名前を受け取って挨拶する </span>`<span class="editor-theme-code">greet(const string&)</span>`  
<span style="white-space: pre-wrap;">3️⃣ 面積を求める </span>`<span class="editor-theme-code">area</span>`<span style="white-space: pre-wrap;"> を整数／実数でオーバーロード</span>

---

## 🏆 まとめ

- 関数は「処理をまとめる箱」
- const参照で安全・高速な引数渡し
- オーバーロードで同じ名前の関数を使い分け