テンプレートクラスとは、使用する型を
曖昧な状態で定義しておくクラスです。
テンプレートクラスの機能を使うことで、
複数の型に対応することができます。(^^)
// 三辺の長さから、三角形の面積を求めるクラス
template<class T> // T はテンプレート引数です(^^;)
class Triangle {
public:
Triangle(T a, T b, T c) {
m_a = a;
m_base = b; // 辺b を底辺としよう(^^;)
m_c = c;
}
T GetHeight() {
return ((m_a + m_base + m_c) / 2) * 2 / m_base;
}
T GetSummation() {
return (m_a + m_base + m_c) / 2; // ヘロンの公式
}
T m_a, m_base, m_c;
};
テンプレートクラスのオブジェクトを生成する場合は、次のように
使用する型を指定します。
Triangle<int> IntTriangle; // int型を指定します
Triangle<double> DoubleTriangle; // double型を指定します
また、テンプレート引数が二つ以上ある場合は、次のように
複数指定します。
template<class T1, class T2> // テンプレートなだけにT1, T2
class Triangle {
:
};
:
Triangle<int, double> tri; // int型、double型を指定します
:
それでは、今回のサンプルプログラムです。
#include <iostream>
using namespace std;
template<class T> // T はテンプレート引数です(^^;)
class Triangle {
public:
Triangle(T a, T b, T c) {
m_a = a;
m_base = b;
m_c = c;
}
T GetHeight() {
return ((m_a + m_base + m_c) / 2) * 2 / m_base;
}
T GetSummation() {
return (m_a + m_base + m_c) / 2;
}
T m_a, m_base, m_c;
};
int main(void)
{
Triangle<int> tri1(59, 50, 100);
cout << "a = 59, b = 50, c = 100" << endl;
cout << "height = " << tri1.GetHeight() << endl;
cout << " sum = " << tri1.GetSummation() << endl;
cout << "---" << endl;
Triangle<double> tri2(12.3, 45.6, 78.9);
cout << "a = 12.3, b = 45.6, c = 78.9" << endl;
cout << "height = " << tri2.GetHeight() << endl;
cout << " sum = " << tri2.GetSummation() << endl;
return 0;
}
実行結果
# ./test
a = 59, b = 50, c = 100
height = 4
sum = 104
---
a = 12.3, b = 45.6, c = 78.9
height = 3
sum = 68.4
うーん、書いておいてなんですが合っているのかどうかが
分からないですね...(-_-;)
ちなみに、面積を求めるときのヘロンの公式をググったときに
面積 S とあったのですが、ふとこの S が何の略か気になり
これもまたググったところ、数学界の定説は
和を表すsumあるいはsummationの頭文字
とのことです。
surface じゃなかったんだ...|д゚)
今日の名言
今日気にかかることで、明日も気にかかることはめったにない。だから夜、
床につく時、たいていの悩みに対しては、安心してこう言い聞かせられる。
「お前には全力を尽くした。今後もう会うことはあるまい」
ウィリアム・クーパー
私は未来のことを考えない。あっという間にやってくるからだ。
アルバート・アインシュタイン
神の到来を待ち望む者は、自分が神の御手の中に現在いることが
分からない。神と幸福は不離一体であるという信念を抱いて、あらゆる
幸福を現在のこの一瞬の中に注ぎ込むことだ。
アンドレ・ジード
落し物の広告。昨日、日の出から日の入りの間のどこかで、それぞれ
六十分のダイヤモンドをちりばめた貴重な時間を二つ紛失。
なお拾い主には賞金なし。永遠に失われしゆえ。
ホレス・マン