「Cpp テンプレート」の版間の差分
(ページの作成:「C++に戻る <table class="mbox-small" style="border:1px solid #aaa; background-color:#f9f9f9; width:22em;" id="RealTitleBanner"> <tr> <td style="width:1px;"></td> <td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++ テンプレート</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td>…」) |
(→テンプレート) |
||
11行目: | 11行目: | ||
<br /> | <br /> | ||
== '''テンプレート''' == | == '''テンプレート''' == | ||
クラスのテンプレートは以下のような記述形式で定義します。 | |||
<syntaxhighlight lang="cpp"> | |||
template <class TYPENAME> | |||
class Class_Name { | |||
} | |||
</syntaxhighlight> | |||
のようにしてTYPENAMEに任意の型名を受け取ることを想定したクラス定義したテンプレートになります。 | |||
そして利用するときに、int型で定義したい場合は | |||
<syntaxhighlight lang="cpp"> | |||
Class_Name<int> intPair(10, 20 /*コンストラクタ引数群*/); | |||
</syntaxhighlight> | |||
のようにします。 | |||
ここからは、サンプルプログラムをまず示して、それについて説明します。ここでは T が任意の型を当てはめることを想定した型名変数に相当します。 | |||
<syntaxhighlight lang="cpp"> | |||
#include <iostream> | |||
// テンプレートを使用したジェネリックなPairクラスの定義 | |||
template <class T> | |||
class Pair { | |||
private: | |||
T first; | |||
T second; | |||
public: | |||
// コンストラクタ: デフォルト引数を使用して初期化 | |||
Pair(const T& initFirst = T(), const T& initSecond = T()) | |||
: first(initFirst), second(initSecond) {} | |||
// 1番目の要素を返すメソッド | |||
T getFirst() const { | |||
return first; | |||
} | |||
// 2番目の要素を返すメソッド | |||
T getSecond() const { | |||
return second; | |||
} | |||
// 1番目の要素への参照を返すメソッド | |||
T& refFirst() { | |||
return first; | |||
} | |||
// 2番目の要素への参照を返すメソッド | |||
T& refSecond() { | |||
return second; | |||
} | |||
// 演算子のオーバーロード: Pairオブジェクトの表示 | |||
friend std::ostream& operator<<(std::ostream& os, const Pair<T>& pair) { | |||
return os << "[" << pair.getFirst() << ", " << pair.getSecond() << "]"; | |||
} | |||
}; | |||
int main() { | |||
// int型のPairオブジェクトを生成 | |||
Pair<int> intPair(10, 20); | |||
// 値の表示 | |||
std::cout << "Pair of integers: " << intPair << std::endl; | |||
// 1番目の要素への変更 | |||
intPair.refFirst() = 30; | |||
// 変更後の値を表示 | |||
std::cout << "Modified pair: " << intPair << std::endl; | |||
return 0; | |||
} | |||
</syntaxhighlight> | |||
'''1.テンプレートを使用したジェネリックなPairクラス:''' | |||
Pairクラスはテンプレートを使用しており、Tは任意の型を表します。これにより、異なる型のデータを格納することができます。 | |||
'''2.デフォルト引数を使用したコンストラクタ:''' | |||
コンストラクタはデフォルト引数を使用して初期化を行います。これにより、引数を省略した場合にはデフォルト値が使用されます。 | |||
'''3.メソッドの説明:''' | |||
getFirstおよびgetSecondメソッドは、それぞれ1番目と2番目の要素を取得します。 | |||
refFirstおよびrefSecondメソッドは、それぞれ1番目と2番目の要素への参照を返します。 | |||
'''4.演算子のオーバーロード:''' | |||
operator<<関数は、Pairオブジェクトを出力ストリームに挿入するための演算子のオーバーロードです。これにより、std::cout << intPairといった形で直接表示できます。 | |||
'''5.main関数:''' | |||
Pair<int>型のオブジェクトを生成し、その値を表示します。後に1番目の要素を変更して再び表示します。 | |||
[[C PlusPlus#C++からの技術|C++]]に戻る | [[C PlusPlus#C++からの技術|C++]]に戻る |
2024年2月27日 (火) 19:48時点における版
C++に戻る
本来の表記は「C++ テンプレート」です。この記事に付けられた題名はテンプレート:記事名の制約から不正確なものとなっています。 |
※このページではC++にのみ存在する機能として、記事タイトルがC++ テンプレートになっています。
テンプレート
クラスのテンプレートは以下のような記述形式で定義します。
template <class TYPENAME>
class Class_Name {
}
のようにしてTYPENAMEに任意の型名を受け取ることを想定したクラス定義したテンプレートになります。
そして利用するときに、int型で定義したい場合は
Class_Name<int> intPair(10, 20 /*コンストラクタ引数群*/);
のようにします。
ここからは、サンプルプログラムをまず示して、それについて説明します。ここでは T が任意の型を当てはめることを想定した型名変数に相当します。
#include <iostream>
// テンプレートを使用したジェネリックなPairクラスの定義
template <class T>
class Pair {
private:
T first;
T second;
public:
// コンストラクタ: デフォルト引数を使用して初期化
Pair(const T& initFirst = T(), const T& initSecond = T())
: first(initFirst), second(initSecond) {}
// 1番目の要素を返すメソッド
T getFirst() const {
return first;
}
// 2番目の要素を返すメソッド
T getSecond() const {
return second;
}
// 1番目の要素への参照を返すメソッド
T& refFirst() {
return first;
}
// 2番目の要素への参照を返すメソッド
T& refSecond() {
return second;
}
// 演算子のオーバーロード: Pairオブジェクトの表示
friend std::ostream& operator<<(std::ostream& os, const Pair<T>& pair) {
return os << "[" << pair.getFirst() << ", " << pair.getSecond() << "]";
}
};
int main() {
// int型のPairオブジェクトを生成
Pair<int> intPair(10, 20);
// 値の表示
std::cout << "Pair of integers: " << intPair << std::endl;
// 1番目の要素への変更
intPair.refFirst() = 30;
// 変更後の値を表示
std::cout << "Modified pair: " << intPair << std::endl;
return 0;
}
1.テンプレートを使用したジェネリックなPairクラス:
Pairクラスはテンプレートを使用しており、Tは任意の型を表します。これにより、異なる型のデータを格納することができます。
2.デフォルト引数を使用したコンストラクタ:
コンストラクタはデフォルト引数を使用して初期化を行います。これにより、引数を省略した場合にはデフォルト値が使用されます。
3.メソッドの説明:
getFirstおよびgetSecondメソッドは、それぞれ1番目と2番目の要素を取得します。 refFirstおよびrefSecondメソッドは、それぞれ1番目と2番目の要素への参照を返します。
4.演算子のオーバーロード:
operator<<関数は、Pairオブジェクトを出力ストリームに挿入するための演算子のオーバーロードです。これにより、std::cout << intPairといった形で直接表示できます。
5.main関数:
Pair<int>型のオブジェクトを生成し、その値を表示します。後に1番目の要素を変更して再び表示します。
C++に戻る