Day 15では、C++のテンプレートについて学習します。
テンプレートは、汎用的なプログラムを作成するための強力な機能で、関数やクラスを汎用的に定義することができます。
以下にテンプレートの主な内容と、例題、演習問題を提示します。
テンプレートの主な内容:
1. 関数テンプレート:
– 関数テンプレートは、関数を汎用的に定義する方法です。
– 関数テンプレートを使用することで、異なるデータ型に対して同じ処理を行う関数を1つにまとめることができます。
2. クラステンプレート:
– クラステンプレートは、クラスを汎用的に定義する方法です。
– クラステンプレートを使用することで、異なるデータ型に対して同じデータ構造や振る舞いを持つクラスを1つにまとめることができます。
3. テンプレートの特殊化:
– テンプレートの特殊化を使用することで、特定のデータ型に対してカスタムの処理を行うことができます。
例題:
#include <iostream> // 関数テンプレート template <typename T> T add(T a, T b) { return a + b; } // クラステンプレート template <typename T> class Pair { public: Pair(T first, T second) : firstValue(first), secondValue(second) {} T getFirst() const { return firstValue; } T getSecond() const { return secondValue; } private: T firstValue; T secondValue; }; int main() { // 関数テンプレートの使用 int sum1 = add(1, 2); double sum2 = add(3.14, 2.71); std::cout << "Sum1: " << sum1 << std::endl; std::cout << "Sum2: " << sum2 << std::endl; // クラステンプレートの使用 Pair<int> pair1(10, 20); Pair<std::string> pair2("Hello", "World"); std::cout << "First value of pair1: " << pair1.getFirst() << std::endl; std::cout << "Second value of pair2: " << pair2.getSecond() << std::endl; return 0; }
演習問題:
1. `std::vector` を使用して、異なるデータ型に対して平均値を計算する関数テンプレート `average` を定義してください。この関数テンプレートは、ベクトルの要素を合計して要素数で割った平均値を返すものとします。
2. クラステンプレート `Triple` を定義してください。このクラスは3つの要素を持ち、それぞれの要素を格納するためのメンバ変数と、要素を表示するメソッド `display` を持ちます。
これらの例題と演習問題を解くことで、テンプレートの使い方を理解し、汎用的なプログラムの作成スキルを向上させることができます。問題を解いたら、テンプレートが適切に動作しているかどうかを確認してみてください。